{
  "contractName": "StringUtils",
  "abi": [],
  "metadata": "{\"compiler\":{\"version\":\"0.4.24+commit.e67f0147\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"methods\":{}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"/Users/chtian/Documents/01_work/01_develope/jcc/jcc-solidity-utils/contracts/utils/StringUtils.sol\":\"StringUtils\"},\"evmVersion\":\"byzantium\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/Users/chtian/Documents/01_work/01_develope/jcc/jcc-solidity-utils/contracts/utils/StringUtils.sol\":{\"keccak256\":\"0xc19208b7c3ff461890e9fd7ff239c8117091c6a09dda4fc3a24131abc49f0a22\",\"urls\":[\"bzzr://1e827a43f7437be23fca88c994e91a20f80f613043089aeacc54ddd2d92910ed\"]}},\"version\":1}",
  "bytecode": "0x604c602c600b82828239805160001a60731460008114601c57601e565bfe5b5030600052607381538281f30073000000000000000000000000000000000000000030146080604052600080fd00a165627a7a72305820ee17f9c564e383bc569f172c888e3e6bb30a9aa29e27b0d920d5926d44c9cae50029",
  "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600080fd00a165627a7a72305820ee17f9c564e383bc569f172c888e3e6bb30a9aa29e27b0d920d5926d44c9cae50029",
  "sourceMap": "2109:21569:35:-;;132:2:-1;166:7;155:9;146:7;137:37;252:7;246:14;243:1;238:23;232:4;229:33;270:1;265:20;;;;222:63;;265:20;274:9;222:63;;298:9;295:1;288:20;328:4;319:7;311:22;352:7;343;336:24",
  "deployedSourceMap": "2109:21569:35:-;;;;;;;;",
  "source": "/*\n * @title String & slice utility library for Solidity contracts.\n * @author Nick Johnson <arachnid@notdot.net>\n *\n * @dev Functionality in this library is largely implemented using an\n *      abstraction called a 'slice'. A slice represents a part of a string -\n *      anything from the entire string to a single character, or even no\n *      characters at all (a 0-length slice). Since a slice only has to specify\n *      an offset and a length, copying and manipulating slices is a lot less\n *      expensive than copying and manipulating the strings they reference.\n *\n *      To further reduce gas costs, most functions on slice that need to return\n *      a slice modify the original one instead of allocating a new one; for\n *      instance, `s.split(\".\")` will return the text up to the first '.',\n *      modifying s to only contain the remainder of the string after the '.'.\n *      In situations where you do not want to modify the original slice, you\n *      can make a copy first with `.copy()`, for example:\n *      `s.copy().split(\".\")`. Try and avoid using this idiom in loops; since\n *      Solidity has no memory management, it will result in allocating many\n *      short-lived slices that are later discarded.\n *\n *      Functions that return two slices come in two versions: a non-allocating\n *      version that takes the second slice as an argument, modifying it in\n *      place, and an allocating version that allocates and returns the second\n *      slice; see `nextRune` for example.\n *\n *      Functions that have to copy string data will return strings rather than\n *      slices; these can be cast back to slices for further processing if\n *      required.\n *\n *      For convenience, some functions are provided with non-modifying\n *      variants that create a new slice and return both; for instance,\n *      `s.splitNew('.')` leaves s unmodified, and returns two values\n *      corresponding to the left and right parts of the string.\n */\n\npragma solidity >=0.4.24;\n\n/**\n * @dev Utility library of string.\n * see also: https://github.com/Arachnid/solidity-stringutils\n */\nlibrary StringUtils {\n  struct slice {\n    uint256 _len;\n    uint256 _ptr;\n  }\n\n  function memcpy(\n    uint256 dest,\n    uint256 src,\n    uint256 len\n  ) private pure {\n    // Copy word-length chunks while possible\n    for (; len >= 32; len -= 32) {\n      assembly {\n        mstore(dest, mload(src))\n      }\n      dest += 32;\n      src += 32;\n    }\n\n    // Copy remaining bytes\n    uint256 mask = 256**(32 - len) - 1;\n    assembly {\n      let srcpart := and(mload(src), not(mask))\n      let destpart := and(mload(dest), mask)\n      mstore(dest, or(destpart, srcpart))\n    }\n  }\n\n  /*\n   * @dev Returns a slice containing the entire string.\n   * @param self The string to make a slice from.\n   * @return A newly allocated slice containing the entire string.\n   */\n  function toSlice(string memory self) internal pure returns (slice memory) {\n    uint256 ptr;\n    assembly {\n      ptr := add(self, 0x20)\n    }\n    return slice(bytes(self).length, ptr);\n  }\n\n  /*\n   * @dev Returns the length of a null-terminated bytes32 string.\n   * @param self The value to find the length of.\n   * @return The length of the string, from 0 to 32.\n   */\n  function len(bytes32 self) internal pure returns (uint256) {\n    uint256 ret;\n    if (self == 0) return 0;\n    if (self & 0xffffffffffffffffffffffffffffffff == 0) {\n      ret += 16;\n      self = bytes32(uint256(self) / 0x100000000000000000000000000000000);\n    }\n    if (self & 0xffffffffffffffff == 0) {\n      ret += 8;\n      self = bytes32(uint256(self) / 0x10000000000000000);\n    }\n    if (self & 0xffffffff == 0) {\n      ret += 4;\n      self = bytes32(uint256(self) / 0x100000000);\n    }\n    if (self & 0xffff == 0) {\n      ret += 2;\n      self = bytes32(uint256(self) / 0x10000);\n    }\n    if (self & 0xff == 0) {\n      ret += 1;\n    }\n    return 32 - ret;\n  }\n\n  /*\n   * @dev Returns a slice containing the entire bytes32, interpreted as a\n   *      null-terminated utf-8 string.\n   * @param self The bytes32 value to convert to a slice.\n   * @return A new slice containing the value of the input argument up to the\n   *         first null.\n   */\n  function toSliceB32(bytes32 self) internal pure returns (slice memory ret) {\n    // Allocate space for `self` in memory, copy it there, and point ret at it\n    assembly {\n      let ptr := mload(0x40)\n      mstore(0x40, add(ptr, 0x20))\n      mstore(ptr, self)\n      mstore(add(ret, 0x20), ptr)\n    }\n    ret._len = len(self);\n  }\n\n  /*\n   * @dev Returns a new slice containing the same data as the current slice.\n   * @param self The slice to copy.\n   * @return A new slice containing the same data as `self`.\n   */\n  function copy(slice memory self) internal pure returns (slice memory) {\n    return slice(self._len, self._ptr);\n  }\n\n  /*\n   * @dev Copies a slice to a new string.\n   * @param self The slice to copy.\n   * @return A newly allocated string containing the slice's text.\n   */\n  function toString(slice memory self) internal pure returns (string memory) {\n    string memory ret = new string(self._len);\n    uint256 retptr;\n    assembly {\n      retptr := add(ret, 32)\n    }\n\n    memcpy(retptr, self._ptr, self._len);\n    return ret;\n  }\n\n  /*\n   * @dev Returns the length in runes of the slice. Note that this operation\n   *      takes time proportional to the length of the slice; avoid using it\n   *      in loops, and call `slice.empty()` if you only need to know whether\n   *      the slice is empty or not.\n   * @param self The slice to operate on.\n   * @return The length of the slice in runes.\n   */\n  function len(slice memory self) internal pure returns (uint256 l) {\n    // Starting at ptr-31 means the LSB will be the byte we care about\n    uint256 ptr = self._ptr - 31;\n    uint256 end = ptr + self._len;\n    for (l = 0; ptr < end; l++) {\n      uint8 b;\n      assembly {\n        b := and(mload(ptr), 0xFF)\n      }\n      if (b < 0x80) {\n        ptr += 1;\n      } else if (b < 0xE0) {\n        ptr += 2;\n      } else if (b < 0xF0) {\n        ptr += 3;\n      } else if (b < 0xF8) {\n        ptr += 4;\n      } else if (b < 0xFC) {\n        ptr += 5;\n      } else {\n        ptr += 6;\n      }\n    }\n  }\n\n  /*\n   * @dev Returns true if the slice is empty (has a length of 0).\n   * @param self The slice to operate on.\n   * @return True if the slice is empty, False otherwise.\n   */\n  function empty(slice memory self) internal pure returns (bool) {\n    return self._len == 0;\n  }\n\n  /*\n   * @dev Returns a positive number if `other` comes lexicographically after\n   *      `self`, a negative number if it comes before, or zero if the\n   *      contents of the two slices are equal. Comparison is done per-rune,\n   *      on unicode codepoints.\n   * @param self The first slice to compare.\n   * @param other The second slice to compare.\n   * @return The result of the comparison.\n   */\n  function compare(slice memory self, slice memory other)\n    internal\n    pure\n    returns (int256)\n  {\n    uint256 shortest = self._len;\n    if (other._len < self._len) shortest = other._len;\n\n    uint256 selfptr = self._ptr;\n    uint256 otherptr = other._ptr;\n    for (uint256 idx = 0; idx < shortest; idx += 32) {\n      uint256 a;\n      uint256 b;\n      assembly {\n        a := mload(selfptr)\n        b := mload(otherptr)\n      }\n      if (a != b) {\n        // Mask out irrelevant bytes and check again\n        uint256 mask = uint256(-1); // 0xffff...\n        if (shortest < 32) {\n          mask = ~(2**(8 * (32 - shortest + idx)) - 1);\n        }\n        uint256 diff = (a & mask) - (b & mask);\n        if (diff != 0) return int256(diff);\n      }\n      selfptr += 32;\n      otherptr += 32;\n    }\n    return int256(self._len) - int256(other._len);\n  }\n\n  /*\n   * @dev Returns true if the two slices contain the same text.\n   * @param self The first slice to compare.\n   * @param self The second slice to compare.\n   * @return True if the slices are equal, false otherwise.\n   */\n  function equals(slice memory self, slice memory other)\n    internal\n    pure\n    returns (bool)\n  {\n    return compare(self, other) == 0;\n  }\n\n  /*\n   * @dev Extracts the first rune in the slice into `rune`, advancing the\n   *      slice to point to the next rune and returning `self`.\n   * @param self The slice to operate on.\n   * @param rune The slice that will contain the first rune.\n   * @return `rune`.\n   */\n  function nextRune(slice memory self, slice memory rune)\n    internal\n    pure\n    returns (slice memory)\n  {\n    rune._ptr = self._ptr;\n\n    if (self._len == 0) {\n      rune._len = 0;\n      return rune;\n    }\n\n    uint256 l;\n    uint256 b;\n    // Load the first byte of the rune into the LSBs of b\n    assembly {\n      b := and(mload(sub(mload(add(self, 32)), 31)), 0xFF)\n    }\n    if (b < 0x80) {\n      l = 1;\n    } else if (b < 0xE0) {\n      l = 2;\n    } else if (b < 0xF0) {\n      l = 3;\n    } else {\n      l = 4;\n    }\n\n    // Check for truncated codepoints\n    if (l > self._len) {\n      rune._len = self._len;\n      self._ptr += self._len;\n      self._len = 0;\n      return rune;\n    }\n\n    self._ptr += l;\n    self._len -= l;\n    rune._len = l;\n    return rune;\n  }\n\n  /*\n   * @dev Returns the first rune in the slice, advancing the slice to point\n   *      to the next rune.\n   * @param self The slice to operate on.\n   * @return A slice containing only the first rune from `self`.\n   */\n  function nextRune(slice memory self)\n    internal\n    pure\n    returns (slice memory ret)\n  {\n    nextRune(self, ret);\n  }\n\n  /*\n   * @dev Returns the number of the first codepoint in the slice.\n   * @param self The slice to operate on.\n   * @return The number of the first codepoint in the slice.\n   */\n  function ord(slice memory self) internal pure returns (uint256 ret) {\n    if (self._len == 0) {\n      return 0;\n    }\n\n    uint256 word;\n    uint256 length;\n    uint256 divisor = 2**248;\n\n    // Load the rune into the MSBs of b\n    assembly {\n      word := mload(mload(add(self, 32)))\n    }\n    uint256 b = word / divisor;\n    if (b < 0x80) {\n      ret = b;\n      length = 1;\n    } else if (b < 0xE0) {\n      ret = b & 0x1F;\n      length = 2;\n    } else if (b < 0xF0) {\n      ret = b & 0x0F;\n      length = 3;\n    } else {\n      ret = b & 0x07;\n      length = 4;\n    }\n\n    // Check for truncated codepoints\n    if (length > self._len) {\n      return 0;\n    }\n\n    for (uint256 i = 1; i < length; i++) {\n      divisor = divisor / 256;\n      b = (word / divisor) & 0xFF;\n      if (b & 0xC0 != 0x80) {\n        // Invalid UTF-8 sequence\n        return 0;\n      }\n      ret = (ret * 64) | (b & 0x3F);\n    }\n\n    return ret;\n  }\n\n  /*\n   * @dev Returns the keccak-256 hash of the slice.\n   * @param self The slice to hash.\n   * @return The hash of the slice.\n   */\n  function keccak(slice memory self) internal pure returns (bytes32 ret) {\n    assembly {\n      ret := keccak256(mload(add(self, 32)), mload(self))\n    }\n  }\n\n  /*\n   * @dev Returns true if `self` starts with `needle`.\n   * @param self The slice to operate on.\n   * @param needle The slice to search for.\n   * @return True if the slice starts with the provided text, false otherwise.\n   */\n  function startsWith(slice memory self, slice memory needle)\n    internal\n    pure\n    returns (bool)\n  {\n    if (self._len < needle._len) {\n      return false;\n    }\n\n    if (self._ptr == needle._ptr) {\n      return true;\n    }\n\n    bool equal;\n    assembly {\n      let length := mload(needle)\n      let selfptr := mload(add(self, 0x20))\n      let needleptr := mload(add(needle, 0x20))\n      equal := eq(keccak256(selfptr, length), keccak256(needleptr, length))\n    }\n    return equal;\n  }\n\n  /*\n   * @dev If `self` starts with `needle`, `needle` is removed from the\n   *      beginning of `self`. Otherwise, `self` is unmodified.\n   * @param self The slice to operate on.\n   * @param needle The slice to search for.\n   * @return `self`\n   */\n  function beyond(slice memory self, slice memory needle)\n    internal\n    pure\n    returns (slice memory)\n  {\n    if (self._len < needle._len) {\n      return self;\n    }\n\n    bool equal = true;\n    if (self._ptr != needle._ptr) {\n      assembly {\n        let length := mload(needle)\n        let selfptr := mload(add(self, 0x20))\n        let needleptr := mload(add(needle, 0x20))\n        equal := eq(keccak256(selfptr, length), keccak256(needleptr, length))\n      }\n    }\n\n    if (equal) {\n      self._len -= needle._len;\n      self._ptr += needle._len;\n    }\n\n    return self;\n  }\n\n  /*\n   * @dev Returns true if the slice ends with `needle`.\n   * @param self The slice to operate on.\n   * @param needle The slice to search for.\n   * @return True if the slice starts with the provided text, false otherwise.\n   */\n  function endsWith(slice memory self, slice memory needle)\n    internal\n    pure\n    returns (bool)\n  {\n    if (self._len < needle._len) {\n      return false;\n    }\n\n    uint256 selfptr = self._ptr + self._len - needle._len;\n\n    if (selfptr == needle._ptr) {\n      return true;\n    }\n\n    bool equal;\n    assembly {\n      let length := mload(needle)\n      let needleptr := mload(add(needle, 0x20))\n      equal := eq(keccak256(selfptr, length), keccak256(needleptr, length))\n    }\n\n    return equal;\n  }\n\n  /*\n   * @dev If `self` ends with `needle`, `needle` is removed from the\n   *      end of `self`. Otherwise, `self` is unmodified.\n   * @param self The slice to operate on.\n   * @param needle The slice to search for.\n   * @return `self`\n   */\n  function until(slice memory self, slice memory needle)\n    internal\n    pure\n    returns (slice memory)\n  {\n    if (self._len < needle._len) {\n      return self;\n    }\n\n    uint256 selfptr = self._ptr + self._len - needle._len;\n    bool equal = true;\n    if (selfptr != needle._ptr) {\n      assembly {\n        let length := mload(needle)\n        let needleptr := mload(add(needle, 0x20))\n        equal := eq(keccak256(selfptr, length), keccak256(needleptr, length))\n      }\n    }\n\n    if (equal) {\n      self._len -= needle._len;\n    }\n\n    return self;\n  }\n\n  // Returns the memory address of the first byte of the first occurrence of\n  // `needle` in `self`, or the first byte after `self` if not found.\n  function findPtr(\n    uint256 selflen,\n    uint256 selfptr,\n    uint256 needlelen,\n    uint256 needleptr\n  ) private pure returns (uint256) {\n    uint256 ptr = selfptr;\n    uint256 idx;\n\n    if (needlelen <= selflen) {\n      if (needlelen <= 32) {\n        bytes32 mask = bytes32(~(2**(8 * (32 - needlelen)) - 1));\n\n        bytes32 needledata;\n        assembly {\n          needledata := and(mload(needleptr), mask)\n        }\n\n        uint256 end = selfptr + selflen - needlelen;\n        bytes32 ptrdata;\n        assembly {\n          ptrdata := and(mload(ptr), mask)\n        }\n\n        while (ptrdata != needledata) {\n          if (ptr >= end) return selfptr + selflen;\n          ptr++;\n          assembly {\n            ptrdata := and(mload(ptr), mask)\n          }\n        }\n        return ptr;\n      } else {\n        // For long needles, use hashing\n        bytes32 hash;\n        assembly {\n          hash := keccak256(needleptr, needlelen)\n        }\n\n        for (idx = 0; idx <= selflen - needlelen; idx++) {\n          bytes32 testHash;\n          assembly {\n            testHash := keccak256(ptr, needlelen)\n          }\n          if (hash == testHash) return ptr;\n          ptr += 1;\n        }\n      }\n    }\n    return selfptr + selflen;\n  }\n\n  // Returns the memory address of the first byte after the last occurrence of\n  // `needle` in `self`, or the address of `self` if not found.\n  function rfindPtr(\n    uint256 selflen,\n    uint256 selfptr,\n    uint256 needlelen,\n    uint256 needleptr\n  ) private pure returns (uint256) {\n    uint256 ptr;\n\n    if (needlelen <= selflen) {\n      if (needlelen <= 32) {\n        bytes32 mask = bytes32(~(2**(8 * (32 - needlelen)) - 1));\n\n        bytes32 needledata;\n        assembly {\n          needledata := and(mload(needleptr), mask)\n        }\n\n        ptr = selfptr + selflen - needlelen;\n        bytes32 ptrdata;\n        assembly {\n          ptrdata := and(mload(ptr), mask)\n        }\n\n        while (ptrdata != needledata) {\n          if (ptr <= selfptr) return selfptr;\n          ptr--;\n          assembly {\n            ptrdata := and(mload(ptr), mask)\n          }\n        }\n        return ptr + needlelen;\n      } else {\n        // For long needles, use hashing\n        bytes32 hash;\n        assembly {\n          hash := keccak256(needleptr, needlelen)\n        }\n        ptr = selfptr + (selflen - needlelen);\n        while (ptr >= selfptr) {\n          bytes32 testHash;\n          assembly {\n            testHash := keccak256(ptr, needlelen)\n          }\n          if (hash == testHash) return ptr + needlelen;\n          ptr -= 1;\n        }\n      }\n    }\n    return selfptr;\n  }\n\n  /*\n   * @dev Modifies `self` to contain everything from the first occurrence of\n   *      `needle` to the end of the slice. `self` is set to the empty slice\n   *      if `needle` is not found.\n   * @param self The slice to search and modify.\n   * @param needle The text to search for.\n   * @return `self`.\n   */\n  function find(slice memory self, slice memory needle)\n    internal\n    pure\n    returns (slice memory)\n  {\n    uint256 ptr = findPtr(self._len, self._ptr, needle._len, needle._ptr);\n    self._len -= ptr - self._ptr;\n    self._ptr = ptr;\n    return self;\n  }\n\n  /*\n   * @dev Modifies `self` to contain the part of the string from the start of\n   *      `self` to the end of the first occurrence of `needle`. If `needle`\n   *      is not found, `self` is set to the empty slice.\n   * @param self The slice to search and modify.\n   * @param needle The text to search for.\n   * @return `self`.\n   */\n  function rfind(slice memory self, slice memory needle)\n    internal\n    pure\n    returns (slice memory)\n  {\n    uint256 ptr = rfindPtr(self._len, self._ptr, needle._len, needle._ptr);\n    self._len = ptr - self._ptr;\n    return self;\n  }\n\n  /*\n   * @dev Splits the slice, setting `self` to everything after the first\n   *      occurrence of `needle`, and `token` to everything before it. If\n   *      `needle` does not occur in `self`, `self` is set to the empty slice,\n   *      and `token` is set to the entirety of `self`.\n   * @param self The slice to split.\n   * @param needle The text to search for in `self`.\n   * @param token An output parameter to which the first token is written.\n   * @return `token`.\n   */\n  function split(\n    slice memory self,\n    slice memory needle,\n    slice memory token\n  ) internal pure returns (slice memory) {\n    uint256 ptr = findPtr(self._len, self._ptr, needle._len, needle._ptr);\n    token._ptr = self._ptr;\n    token._len = ptr - self._ptr;\n    if (ptr == self._ptr + self._len) {\n      // Not found\n      self._len = 0;\n    } else {\n      self._len -= token._len + needle._len;\n      self._ptr = ptr + needle._len;\n    }\n    return token;\n  }\n\n  /*\n   * @dev Splits the slice, setting `self` to everything after the first\n   *      occurrence of `needle`, and returning everything before it. If\n   *      `needle` does not occur in `self`, `self` is set to the empty slice,\n   *      and the entirety of `self` is returned.\n   * @param self The slice to split.\n   * @param needle The text to search for in `self`.\n   * @return The part of `self` up to the first occurrence of `delim`.\n   */\n  function split(slice memory self, slice memory needle)\n    internal\n    pure\n    returns (slice memory token)\n  {\n    split(self, needle, token);\n  }\n\n  /*\n   * @dev Splits the slice, setting `self` to everything before the last\n   *      occurrence of `needle`, and `token` to everything after it. If\n   *      `needle` does not occur in `self`, `self` is set to the empty slice,\n   *      and `token` is set to the entirety of `self`.\n   * @param self The slice to split.\n   * @param needle The text to search for in `self`.\n   * @param token An output parameter to which the first token is written.\n   * @return `token`.\n   */\n  function rsplit(\n    slice memory self,\n    slice memory needle,\n    slice memory token\n  ) internal pure returns (slice memory) {\n    uint256 ptr = rfindPtr(self._len, self._ptr, needle._len, needle._ptr);\n    token._ptr = ptr;\n    token._len = self._len - (ptr - self._ptr);\n    if (ptr == self._ptr) {\n      // Not found\n      self._len = 0;\n    } else {\n      self._len -= token._len + needle._len;\n    }\n    return token;\n  }\n\n  /*\n   * @dev Splits the slice, setting `self` to everything before the last\n   *      occurrence of `needle`, and returning everything after it. If\n   *      `needle` does not occur in `self`, `self` is set to the empty slice,\n   *      and the entirety of `self` is returned.\n   * @param self The slice to split.\n   * @param needle The text to search for in `self`.\n   * @return The part of `self` after the last occurrence of `delim`.\n   */\n  function rsplit(slice memory self, slice memory needle)\n    internal\n    pure\n    returns (slice memory token)\n  {\n    rsplit(self, needle, token);\n  }\n\n  /*\n   * @dev Counts the number of nonoverlapping occurrences of `needle` in `self`.\n   * @param self The slice to search.\n   * @param needle The text to search for in `self`.\n   * @return The number of occurrences of `needle` found in `self`.\n   */\n  function count(slice memory self, slice memory needle)\n    internal\n    pure\n    returns (uint256 cnt)\n  {\n    uint256 ptr =\n      findPtr(self._len, self._ptr, needle._len, needle._ptr) + needle._len;\n    while (ptr <= self._ptr + self._len) {\n      cnt++;\n      ptr =\n        findPtr(self._len - (ptr - self._ptr), ptr, needle._len, needle._ptr) +\n        needle._len;\n    }\n  }\n\n  /*\n   * @dev Returns True if `self` contains `needle`.\n   * @param self The slice to search.\n   * @param needle The text to search for in `self`.\n   * @return True if `needle` is found in `self`, false otherwise.\n   */\n  function contains(slice memory self, slice memory needle)\n    internal\n    pure\n    returns (bool)\n  {\n    return\n      rfindPtr(self._len, self._ptr, needle._len, needle._ptr) != self._ptr;\n  }\n\n  /*\n   * @dev Returns a newly allocated string containing the concatenation of\n   *      `self` and `other`.\n   * @param self The first slice to concatenate.\n   * @param other The second slice to concatenate.\n   * @return The concatenation of the two strings.\n   */\n  function concat(slice memory self, slice memory other)\n    internal\n    pure\n    returns (string memory)\n  {\n    string memory ret = new string(self._len + other._len);\n    uint256 retptr;\n    assembly {\n      retptr := add(ret, 32)\n    }\n    memcpy(retptr, self._ptr, self._len);\n    memcpy(retptr + self._len, other._ptr, other._len);\n    return ret;\n  }\n\n  /*\n   * @dev Joins an array of slices, using `self` as a delimiter, returning a\n   *      newly allocated string.\n   * @param self The delimiter to use.\n   * @param parts A list of slices to join.\n   * @return A newly allocated string containing all the slices in `parts`,\n   *         joined with `self`.\n   */\n  function join(slice memory self, slice[] memory parts)\n    internal\n    pure\n    returns (string memory)\n  {\n    if (parts.length == 0) return \"\";\n\n    uint256 length = self._len * (parts.length - 1);\n    for (uint256 i = 0; i < parts.length; i++) length += parts[i]._len;\n\n    string memory ret = new string(length);\n    uint256 retptr;\n    assembly {\n      retptr := add(ret, 32)\n    }\n\n    for (i = 0; i < parts.length; i++) {\n      memcpy(retptr, parts[i]._ptr, parts[i]._len);\n      retptr += parts[i]._len;\n      if (i < parts.length - 1) {\n        memcpy(retptr, self._ptr, self._len);\n        retptr += self._len;\n      }\n    }\n\n    return ret;\n  }\n}\n",
  "sourcePath": "/Users/chtian/Documents/01_work/01_develope/jcc/jcc-solidity-utils/contracts/utils/StringUtils.sol",
  "ast": {
    "absolutePath": "/Users/chtian/Documents/01_work/01_develope/jcc/jcc-solidity-utils/contracts/utils/StringUtils.sol",
    "exportedSymbols": {
      "StringUtils": [
        9026
      ]
    },
    "id": 9027,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 7333,
        "literals": [
          "solidity",
          ">=",
          "0.4",
          ".24"
        ],
        "nodeType": "PragmaDirective",
        "src": "1977:25:35"
      },
      {
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "library",
        "documentation": "@dev Utility library of string.\nsee also: https://github.com/Arachnid/solidity-stringutils",
        "fullyImplemented": true,
        "id": 9026,
        "linearizedBaseContracts": [
          9026
        ],
        "name": "StringUtils",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "canonicalName": "StringUtils.slice",
            "id": 7338,
            "members": [
              {
                "constant": false,
                "id": 7335,
                "name": "_len",
                "nodeType": "VariableDeclaration",
                "scope": 7338,
                "src": "2152:12:35",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 7334,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "2152:7:35",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 7337,
                "name": "_ptr",
                "nodeType": "VariableDeclaration",
                "scope": 7338,
                "src": "2170:12:35",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 7336,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "2170:7:35",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "slice",
            "nodeType": "StructDefinition",
            "scope": 9026,
            "src": "2133:54:35",
            "visibility": "public"
          },
          {
            "body": {
              "id": 7377,
              "nodeType": "Block",
              "src": "2276:410:35",
              "statements": [
                {
                  "body": {
                    "id": 7363,
                    "nodeType": "Block",
                    "src": "2357:100:35",
                    "statements": [
                      {
                        "externalReferences": [
                          {
                            "dest": {
                              "declaration": 7340,
                              "isOffset": false,
                              "isSlot": false,
                              "src": "2391:4:35",
                              "valueSize": 1
                            }
                          },
                          {
                            "src": {
                              "declaration": 7342,
                              "isOffset": false,
                              "isSlot": false,
                              "src": "2403:3:35",
                              "valueSize": 1
                            }
                          }
                        ],
                        "id": 7354,
                        "nodeType": "InlineAssembly",
                        "operations": "{\n    mstore(dest, mload(src))\n}",
                        "src": "2365:62:35"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 7357,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 7355,
                            "name": "dest",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7340,
                            "src": "2423:4:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "3332",
                            "id": 7356,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2431:2:35",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_32_by_1",
                              "typeString": "int_const 32"
                            },
                            "value": "32"
                          },
                          "src": "2423:10:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 7358,
                        "nodeType": "ExpressionStatement",
                        "src": "2423:10:35"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 7361,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 7359,
                            "name": "src",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7342,
                            "src": "2441:3:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "3332",
                            "id": 7360,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2448:2:35",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_32_by_1",
                              "typeString": "int_const 32"
                            },
                            "value": "32"
                          },
                          "src": "2441:9:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 7362,
                        "nodeType": "ExpressionStatement",
                        "src": "2441:9:35"
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 7349,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 7347,
                      "name": "len",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7344,
                      "src": "2335:3:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "3332",
                      "id": 7348,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2342:2:35",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_32_by_1",
                        "typeString": "int_const 32"
                      },
                      "value": "32"
                    },
                    "src": "2335:9:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 7364,
                  "initializationExpression": null,
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 7352,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftHandSide": {
                        "argumentTypes": null,
                        "id": 7350,
                        "name": "len",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7344,
                        "src": "2346:3:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "Assignment",
                      "operator": "-=",
                      "rightHandSide": {
                        "argumentTypes": null,
                        "hexValue": "3332",
                        "id": 7351,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2353:2:35",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_32_by_1",
                          "typeString": "int_const 32"
                        },
                        "value": "32"
                      },
                      "src": "2346:9:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 7353,
                    "nodeType": "ExpressionStatement",
                    "src": "2346:9:35"
                  },
                  "nodeType": "ForStatement",
                  "src": "2328:129:35"
                },
                {
                  "assignments": [
                    7366
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7366,
                      "name": "mask",
                      "nodeType": "VariableDeclaration",
                      "scope": 7378,
                      "src": "2491:12:35",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7365,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "2491:7:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7375,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 7374,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 7372,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "hexValue": "323536",
                        "id": 7367,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2506:3:35",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_256_by_1",
                          "typeString": "int_const 256"
                        },
                        "value": "256"
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "**",
                      "rightExpression": {
                        "argumentTypes": null,
                        "components": [
                          {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 7370,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "hexValue": "3332",
                              "id": 7368,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2512:2:35",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_32_by_1",
                                "typeString": "int_const 32"
                              },
                              "value": "32"
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "-",
                            "rightExpression": {
                              "argumentTypes": null,
                              "id": 7369,
                              "name": "len",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7344,
                              "src": "2517:3:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "2512:8:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "id": 7371,
                        "isConstant": false,
                        "isInlineArray": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "TupleExpression",
                        "src": "2511:10:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "2506:15:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "-",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "31",
                      "id": 7373,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2524:1:35",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "src": "2506:19:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2491:34:35"
                },
                {
                  "externalReferences": [
                    {
                      "src": {
                        "declaration": 7342,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "2573:3:35",
                        "valueSize": 1
                      }
                    },
                    {
                      "mask": {
                        "declaration": 7366,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "2583:4:35",
                        "valueSize": 1
                      }
                    },
                    {
                      "dest": {
                        "declaration": 7340,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "2622:4:35",
                        "valueSize": 1
                      }
                    },
                    {
                      "mask": {
                        "declaration": 7366,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "2629:4:35",
                        "valueSize": 1
                      }
                    },
                    {
                      "dest": {
                        "declaration": 7340,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "2648:4:35",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 7376,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    let srcpart := and(mload(src), not(mask))\n    let destpart := and(mload(dest), mask)\n    mstore(dest, or(destpart, srcpart))\n}",
                  "src": "2531:155:35"
                }
              ]
            },
            "documentation": null,
            "id": 7378,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "memcpy",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7345,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7340,
                  "name": "dest",
                  "nodeType": "VariableDeclaration",
                  "scope": 7378,
                  "src": "2212:12:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7339,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2212:7:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7342,
                  "name": "src",
                  "nodeType": "VariableDeclaration",
                  "scope": 7378,
                  "src": "2230:11:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7341,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2230:7:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7344,
                  "name": "len",
                  "nodeType": "VariableDeclaration",
                  "scope": 7378,
                  "src": "2247:11:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7343,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2247:7:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2206:56:35"
            },
            "payable": false,
            "returnParameters": {
              "id": 7346,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2276:0:35"
            },
            "scope": 9026,
            "src": "2191:495:35",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "private"
          },
          {
            "body": {
              "id": 7397,
              "nodeType": "Block",
              "src": "2948:115:35",
              "statements": [
                {
                  "assignments": [],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7386,
                      "name": "ptr",
                      "nodeType": "VariableDeclaration",
                      "scope": 7398,
                      "src": "2954:11:35",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7385,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "2954:7:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7387,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2954:11:35"
                },
                {
                  "externalReferences": [
                    {
                      "ptr": {
                        "declaration": 7386,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "2988:3:35",
                        "valueSize": 1
                      }
                    },
                    {
                      "self": {
                        "declaration": 7380,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "2999:4:35",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 7388,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    ptr := add(self, 0x20)\n}",
                  "src": "2971:56:35"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 7391,
                              "name": "self",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7380,
                              "src": "3040:4:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            ],
                            "id": 7390,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "3034:5:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                              "typeString": "type(bytes storage pointer)"
                            },
                            "typeName": "bytes"
                          },
                          "id": 7392,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3034:11:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory",
                            "typeString": "bytes memory"
                          }
                        },
                        "id": 7393,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "length",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "3034:18:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7394,
                        "name": "ptr",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7386,
                        "src": "3054:3:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 7389,
                      "name": "slice",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7338,
                      "src": "3028:5:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_struct$_slice_$7338_storage_ptr_$",
                        "typeString": "type(struct StringUtils.slice storage pointer)"
                      }
                    },
                    "id": 7395,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "structConstructorCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3028:30:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$7338_memory",
                      "typeString": "struct StringUtils.slice memory"
                    }
                  },
                  "functionReturnParameters": 7384,
                  "id": 7396,
                  "nodeType": "Return",
                  "src": "3021:37:35"
                }
              ]
            },
            "documentation": null,
            "id": 7398,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "toSlice",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7381,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7380,
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 7398,
                  "src": "2891:18:35",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 7379,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "2891:6:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2890:20:35"
            },
            "payable": false,
            "returnParameters": {
              "id": 7384,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7383,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 7398,
                  "src": "2934:5:35",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                    "typeString": "struct StringUtils.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 7382,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7338,
                    "src": "2934:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$7338_storage_ptr",
                      "typeString": "struct StringUtils.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2933:14:35"
            },
            "scope": 9026,
            "src": "2874:189:35",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 7513,
              "nodeType": "Block",
              "src": "3306:607:35",
              "statements": [
                {
                  "assignments": [],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7406,
                      "name": "ret",
                      "nodeType": "VariableDeclaration",
                      "scope": 7514,
                      "src": "3312:11:35",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7405,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "3312:7:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7407,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3312:11:35"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    },
                    "id": 7410,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 7408,
                      "name": "self",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7400,
                      "src": "3333:4:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 7409,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3341:1:35",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "3333:9:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 7413,
                  "nodeType": "IfStatement",
                  "src": "3329:23:35",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 7411,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3351:1:35",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "functionReturnParameters": 7404,
                    "id": 7412,
                    "nodeType": "Return",
                    "src": "3344:8:35"
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    },
                    "id": 7418,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "id": 7416,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 7414,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7400,
                        "src": "3362:4:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "&",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "30786666666666666666666666666666666666666666666666666666666666666666",
                        "id": 7415,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3369:34:35",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_340282366920938463463374607431768211455_by_1",
                          "typeString": "int_const 3402...(31 digits omitted)...1455"
                        },
                        "value": "0xffffffffffffffffffffffffffffffff"
                      },
                      "src": "3362:41:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 7417,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3407:1:35",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "3362:46:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 7434,
                  "nodeType": "IfStatement",
                  "src": "3358:151:35",
                  "trueBody": {
                    "id": 7433,
                    "nodeType": "Block",
                    "src": "3410:99:35",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 7421,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 7419,
                            "name": "ret",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7406,
                            "src": "3418:3:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "3136",
                            "id": 7420,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "3425:2:35",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_16_by_1",
                              "typeString": "int_const 16"
                            },
                            "value": "16"
                          },
                          "src": "3418:9:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 7422,
                        "nodeType": "ExpressionStatement",
                        "src": "3418:9:35"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 7431,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 7423,
                            "name": "self",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7400,
                            "src": "3435:4:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 7429,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 7426,
                                      "name": "self",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 7400,
                                      "src": "3458:4:35",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      }
                                    ],
                                    "id": 7425,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "3450:7:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_uint256_$",
                                      "typeString": "type(uint256)"
                                    },
                                    "typeName": "uint256"
                                  },
                                  "id": 7427,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "3450:13:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "/",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "hexValue": "3078313030303030303030303030303030303030303030303030303030303030303030",
                                  "id": 7428,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "3466:35:35",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_340282366920938463463374607431768211456_by_1",
                                    "typeString": "int_const 3402...(31 digits omitted)...1456"
                                  },
                                  "value": "0x100000000000000000000000000000000"
                                },
                                "src": "3450:51:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 7424,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "3442:7:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_bytes32_$",
                                "typeString": "type(bytes32)"
                              },
                              "typeName": "bytes32"
                            },
                            "id": 7430,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3442:60:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "3435:67:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 7432,
                        "nodeType": "ExpressionStatement",
                        "src": "3435:67:35"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    },
                    "id": 7439,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "id": 7437,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 7435,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7400,
                        "src": "3518:4:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "&",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "307866666666666666666666666666666666",
                        "id": 7436,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3525:18:35",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_18446744073709551615_by_1",
                          "typeString": "int_const 18446744073709551615"
                        },
                        "value": "0xffffffffffffffff"
                      },
                      "src": "3518:25:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 7438,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3547:1:35",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "3518:30:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 7455,
                  "nodeType": "IfStatement",
                  "src": "3514:118:35",
                  "trueBody": {
                    "id": 7454,
                    "nodeType": "Block",
                    "src": "3550:82:35",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 7442,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 7440,
                            "name": "ret",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7406,
                            "src": "3558:3:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "38",
                            "id": 7441,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "3565:1:35",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_8_by_1",
                              "typeString": "int_const 8"
                            },
                            "value": "8"
                          },
                          "src": "3558:8:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 7443,
                        "nodeType": "ExpressionStatement",
                        "src": "3558:8:35"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 7452,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 7444,
                            "name": "self",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7400,
                            "src": "3574:4:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 7450,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 7447,
                                      "name": "self",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 7400,
                                      "src": "3597:4:35",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      }
                                    ],
                                    "id": 7446,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "3589:7:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_uint256_$",
                                      "typeString": "type(uint256)"
                                    },
                                    "typeName": "uint256"
                                  },
                                  "id": 7448,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "3589:13:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "/",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "hexValue": "30783130303030303030303030303030303030",
                                  "id": 7449,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "3605:19:35",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_18446744073709551616_by_1",
                                    "typeString": "int_const 18446744073709551616"
                                  },
                                  "value": "0x10000000000000000"
                                },
                                "src": "3589:35:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 7445,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "3581:7:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_bytes32_$",
                                "typeString": "type(bytes32)"
                              },
                              "typeName": "bytes32"
                            },
                            "id": 7451,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3581:44:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "3574:51:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 7453,
                        "nodeType": "ExpressionStatement",
                        "src": "3574:51:35"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    },
                    "id": 7460,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "id": 7458,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 7456,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7400,
                        "src": "3641:4:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "&",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "30786666666666666666",
                        "id": 7457,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3648:10:35",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_4294967295_by_1",
                          "typeString": "int_const 4294967295"
                        },
                        "value": "0xffffffff"
                      },
                      "src": "3641:17:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 7459,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3662:1:35",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "3641:22:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 7476,
                  "nodeType": "IfStatement",
                  "src": "3637:102:35",
                  "trueBody": {
                    "id": 7475,
                    "nodeType": "Block",
                    "src": "3665:74:35",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 7463,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 7461,
                            "name": "ret",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7406,
                            "src": "3673:3:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "34",
                            "id": 7462,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "3680:1:35",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_4_by_1",
                              "typeString": "int_const 4"
                            },
                            "value": "4"
                          },
                          "src": "3673:8:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 7464,
                        "nodeType": "ExpressionStatement",
                        "src": "3673:8:35"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 7473,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 7465,
                            "name": "self",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7400,
                            "src": "3689:4:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 7471,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 7468,
                                      "name": "self",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 7400,
                                      "src": "3712:4:35",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      }
                                    ],
                                    "id": 7467,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "3704:7:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_uint256_$",
                                      "typeString": "type(uint256)"
                                    },
                                    "typeName": "uint256"
                                  },
                                  "id": 7469,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "3704:13:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "/",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "hexValue": "3078313030303030303030",
                                  "id": 7470,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "3720:11:35",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_4294967296_by_1",
                                    "typeString": "int_const 4294967296"
                                  },
                                  "value": "0x100000000"
                                },
                                "src": "3704:27:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 7466,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "3696:7:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_bytes32_$",
                                "typeString": "type(bytes32)"
                              },
                              "typeName": "bytes32"
                            },
                            "id": 7472,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3696:36:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "3689:43:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 7474,
                        "nodeType": "ExpressionStatement",
                        "src": "3689:43:35"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    },
                    "id": 7481,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "id": 7479,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 7477,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7400,
                        "src": "3748:4:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "&",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "307866666666",
                        "id": 7478,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3755:6:35",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_65535_by_1",
                          "typeString": "int_const 65535"
                        },
                        "value": "0xffff"
                      },
                      "src": "3748:13:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 7480,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3765:1:35",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "3748:18:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 7497,
                  "nodeType": "IfStatement",
                  "src": "3744:94:35",
                  "trueBody": {
                    "id": 7496,
                    "nodeType": "Block",
                    "src": "3768:70:35",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 7484,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 7482,
                            "name": "ret",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7406,
                            "src": "3776:3:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "32",
                            "id": 7483,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "3783:1:35",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_2_by_1",
                              "typeString": "int_const 2"
                            },
                            "value": "2"
                          },
                          "src": "3776:8:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 7485,
                        "nodeType": "ExpressionStatement",
                        "src": "3776:8:35"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 7494,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 7486,
                            "name": "self",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7400,
                            "src": "3792:4:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 7492,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 7489,
                                      "name": "self",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 7400,
                                      "src": "3815:4:35",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      }
                                    ],
                                    "id": 7488,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "3807:7:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_uint256_$",
                                      "typeString": "type(uint256)"
                                    },
                                    "typeName": "uint256"
                                  },
                                  "id": 7490,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "3807:13:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "/",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "hexValue": "30783130303030",
                                  "id": 7491,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "3823:7:35",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_65536_by_1",
                                    "typeString": "int_const 65536"
                                  },
                                  "value": "0x10000"
                                },
                                "src": "3807:23:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 7487,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "3799:7:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_bytes32_$",
                                "typeString": "type(bytes32)"
                              },
                              "typeName": "bytes32"
                            },
                            "id": 7493,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3799:32:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "3792:39:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 7495,
                        "nodeType": "ExpressionStatement",
                        "src": "3792:39:35"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    },
                    "id": 7502,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "id": 7500,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 7498,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7400,
                        "src": "3847:4:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "&",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "30786666",
                        "id": 7499,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3854:4:35",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_255_by_1",
                          "typeString": "int_const 255"
                        },
                        "value": "0xff"
                      },
                      "src": "3847:11:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 7501,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3862:1:35",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "3847:16:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 7508,
                  "nodeType": "IfStatement",
                  "src": "3843:45:35",
                  "trueBody": {
                    "id": 7507,
                    "nodeType": "Block",
                    "src": "3865:23:35",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 7505,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 7503,
                            "name": "ret",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7406,
                            "src": "3873:3:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "31",
                            "id": 7504,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "3880:1:35",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "src": "3873:8:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 7506,
                        "nodeType": "ExpressionStatement",
                        "src": "3873:8:35"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 7511,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "hexValue": "3332",
                      "id": 7509,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3900:2:35",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_32_by_1",
                        "typeString": "int_const 32"
                      },
                      "value": "32"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "-",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 7510,
                      "name": "ret",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7406,
                      "src": "3905:3:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3900:8:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 7404,
                  "id": 7512,
                  "nodeType": "Return",
                  "src": "3893:15:35"
                }
              ]
            },
            "documentation": null,
            "id": 7514,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "len",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7401,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7400,
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 7514,
                  "src": "3260:12:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 7399,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3260:7:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3259:14:35"
            },
            "payable": false,
            "returnParameters": {
              "id": 7404,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7403,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 7514,
                  "src": "3297:7:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7402,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3297:7:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3296:9:35"
            },
            "scope": 9026,
            "src": "3247:666:35",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 7530,
              "nodeType": "Block",
              "src": "4278:253:35",
              "statements": [
                {
                  "externalReferences": [
                    {
                      "ret": {
                        "declaration": 7519,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "4479:3:35",
                        "valueSize": 1
                      }
                    },
                    {
                      "self": {
                        "declaration": 7516,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "4456:4:35",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 7521,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    let ptr := mload(0x40)\n    mstore(0x40, add(ptr, 0x20))\n    mstore(ptr, self)\n    mstore(add(ret, 0x20), ptr)\n}",
                  "src": "4363:146:35"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7528,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 7522,
                        "name": "ret",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7519,
                        "src": "4506:3:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                          "typeString": "struct StringUtils.slice memory"
                        }
                      },
                      "id": 7524,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7335,
                      "src": "4506:8:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 7526,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7516,
                          "src": "4521:4:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        ],
                        "id": 7525,
                        "name": "len",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [
                          7514,
                          7664
                        ],
                        "referencedDeclaration": 7514,
                        "src": "4517:3:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_bytes32_$returns$_t_uint256_$",
                          "typeString": "function (bytes32) pure returns (uint256)"
                        }
                      },
                      "id": 7527,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4517:9:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "4506:20:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 7529,
                  "nodeType": "ExpressionStatement",
                  "src": "4506:20:35"
                }
              ]
            },
            "documentation": null,
            "id": 7531,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "toSliceB32",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7517,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7516,
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 7531,
                  "src": "4223:12:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 7515,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "4223:7:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4222:14:35"
            },
            "payable": false,
            "returnParameters": {
              "id": 7520,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7519,
                  "name": "ret",
                  "nodeType": "VariableDeclaration",
                  "scope": 7531,
                  "src": "4260:16:35",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                    "typeString": "struct StringUtils.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 7518,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7338,
                    "src": "4260:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$7338_storage_ptr",
                      "typeString": "struct StringUtils.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4259:18:35"
            },
            "scope": 9026,
            "src": "4203:328:35",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 7545,
              "nodeType": "Block",
              "src": "4790:45:35",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 7539,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7533,
                          "src": "4809:4:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                            "typeString": "struct StringUtils.slice memory"
                          }
                        },
                        "id": 7540,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7335,
                        "src": "4809:9:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 7541,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7533,
                          "src": "4820:4:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                            "typeString": "struct StringUtils.slice memory"
                          }
                        },
                        "id": 7542,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_ptr",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7337,
                        "src": "4820:9:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 7538,
                      "name": "slice",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7338,
                      "src": "4803:5:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_struct$_slice_$7338_storage_ptr_$",
                        "typeString": "type(struct StringUtils.slice storage pointer)"
                      }
                    },
                    "id": 7543,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "structConstructorCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4803:27:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$7338_memory",
                      "typeString": "struct StringUtils.slice memory"
                    }
                  },
                  "functionReturnParameters": 7537,
                  "id": 7544,
                  "nodeType": "Return",
                  "src": "4796:34:35"
                }
              ]
            },
            "documentation": null,
            "id": 7546,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "copy",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7534,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7533,
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 7546,
                  "src": "4734:17:35",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                    "typeString": "struct StringUtils.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 7532,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7338,
                    "src": "4734:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$7338_storage_ptr",
                      "typeString": "struct StringUtils.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4733:19:35"
            },
            "payable": false,
            "returnParameters": {
              "id": 7537,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7536,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 7546,
                  "src": "4776:5:35",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                    "typeString": "struct StringUtils.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 7535,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7338,
                    "src": "4776:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$7338_storage_ptr",
                      "typeString": "struct StringUtils.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4775:14:35"
            },
            "scope": 9026,
            "src": "4720:115:35",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 7575,
              "nodeType": "Block",
              "src": "5070:181:35",
              "statements": [
                {
                  "assignments": [
                    7554
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7554,
                      "name": "ret",
                      "nodeType": "VariableDeclaration",
                      "scope": 7576,
                      "src": "5076:17:35",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string"
                      },
                      "typeName": {
                        "id": 7553,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "5076:6:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage_ptr",
                          "typeString": "string"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7560,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 7557,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7548,
                          "src": "5107:4:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                            "typeString": "struct StringUtils.slice memory"
                          }
                        },
                        "id": 7558,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7335,
                        "src": "5107:9:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 7556,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "5096:10:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_string_memory_$",
                        "typeString": "function (uint256) pure returns (string memory)"
                      },
                      "typeName": {
                        "id": 7555,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "5100:6:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage_ptr",
                          "typeString": "string"
                        }
                      }
                    },
                    "id": 7559,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5096:21:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_memory",
                      "typeString": "string memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5076:41:35"
                },
                {
                  "assignments": [],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7562,
                      "name": "retptr",
                      "nodeType": "VariableDeclaration",
                      "scope": 7576,
                      "src": "5123:14:35",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7561,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "5123:7:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7563,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5123:14:35"
                },
                {
                  "externalReferences": [
                    {
                      "retptr": {
                        "declaration": 7562,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "5160:6:35",
                        "valueSize": 1
                      }
                    },
                    {
                      "ret": {
                        "declaration": 7554,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "5174:3:35",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 7564,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    retptr := add(ret, 32)\n}",
                  "src": "5143:57:35"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7566,
                        "name": "retptr",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7562,
                        "src": "5201:6:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 7567,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7548,
                          "src": "5209:4:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                            "typeString": "struct StringUtils.slice memory"
                          }
                        },
                        "id": 7568,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_ptr",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7337,
                        "src": "5209:9:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 7569,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7548,
                          "src": "5220:4:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                            "typeString": "struct StringUtils.slice memory"
                          }
                        },
                        "id": 7570,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7335,
                        "src": "5220:9:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 7565,
                      "name": "memcpy",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7378,
                      "src": "5194:6:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (uint256,uint256,uint256) pure"
                      }
                    },
                    "id": 7571,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5194:36:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7572,
                  "nodeType": "ExpressionStatement",
                  "src": "5194:36:35"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7573,
                    "name": "ret",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 7554,
                    "src": "5243:3:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_memory_ptr",
                      "typeString": "string memory"
                    }
                  },
                  "functionReturnParameters": 7552,
                  "id": 7574,
                  "nodeType": "Return",
                  "src": "5236:10:35"
                }
              ]
            },
            "documentation": null,
            "id": 7576,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "toString",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7549,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7548,
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 7576,
                  "src": "5013:17:35",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                    "typeString": "struct StringUtils.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 7547,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7338,
                    "src": "5013:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$7338_storage_ptr",
                      "typeString": "struct StringUtils.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5012:19:35"
            },
            "payable": false,
            "returnParameters": {
              "id": 7552,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7551,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 7576,
                  "src": "5055:6:35",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 7550,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "5055:6:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5054:15:35"
            },
            "scope": 9026,
            "src": "4995:256:35",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 7663,
              "nodeType": "Block",
              "src": "5690:529:35",
              "statements": [
                {
                  "assignments": [
                    7584
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7584,
                      "name": "ptr",
                      "nodeType": "VariableDeclaration",
                      "scope": 7664,
                      "src": "5767:11:35",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7583,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "5767:7:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7589,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 7588,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 7585,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7578,
                        "src": "5781:4:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                          "typeString": "struct StringUtils.slice memory"
                        }
                      },
                      "id": 7586,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_ptr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7337,
                      "src": "5781:9:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "-",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "3331",
                      "id": 7587,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "5793:2:35",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_31_by_1",
                        "typeString": "int_const 31"
                      },
                      "value": "31"
                    },
                    "src": "5781:14:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5767:28:35"
                },
                {
                  "assignments": [
                    7591
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7591,
                      "name": "end",
                      "nodeType": "VariableDeclaration",
                      "scope": 7664,
                      "src": "5801:11:35",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7590,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "5801:7:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7596,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 7595,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 7592,
                      "name": "ptr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7584,
                      "src": "5815:3:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "+",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 7593,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7578,
                        "src": "5821:4:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                          "typeString": "struct StringUtils.slice memory"
                        }
                      },
                      "id": 7594,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7335,
                      "src": "5821:9:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "5815:15:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5801:29:35"
                },
                {
                  "body": {
                    "id": 7661,
                    "nodeType": "Block",
                    "src": "5864:351:35",
                    "statements": [
                      {
                        "assignments": [],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 7608,
                            "name": "b",
                            "nodeType": "VariableDeclaration",
                            "scope": 7664,
                            "src": "5872:7:35",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            },
                            "typeName": {
                              "id": 7607,
                              "name": "uint8",
                              "nodeType": "ElementaryTypeName",
                              "src": "5872:5:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 7609,
                        "initialValue": null,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "5872:7:35"
                      },
                      {
                        "externalReferences": [
                          {
                            "ptr": {
                              "declaration": 7584,
                              "isOffset": false,
                              "isSlot": false,
                              "src": "5921:3:35",
                              "valueSize": 1
                            }
                          },
                          {
                            "b": {
                              "declaration": 7608,
                              "isOffset": false,
                              "isSlot": false,
                              "src": "5906:1:35",
                              "valueSize": 1
                            }
                          }
                        ],
                        "id": 7610,
                        "nodeType": "InlineAssembly",
                        "operations": "{\n    b := and(mload(ptr), 0xFF)\n}",
                        "src": "5887:62:35"
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          },
                          "id": 7613,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 7611,
                            "name": "b",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7608,
                            "src": "5951:1:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30783830",
                            "id": 7612,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "5955:4:35",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_128_by_1",
                              "typeString": "int_const 128"
                            },
                            "value": "0x80"
                          },
                          "src": "5951:8:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "condition": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            },
                            "id": 7621,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "id": 7619,
                              "name": "b",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7608,
                              "src": "5998:1:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "<",
                            "rightExpression": {
                              "argumentTypes": null,
                              "hexValue": "30784530",
                              "id": 7620,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "6002:4:35",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_224_by_1",
                                "typeString": "int_const 224"
                              },
                              "value": "0xE0"
                            },
                            "src": "5998:8:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "falseBody": {
                            "condition": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              },
                              "id": 7629,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 7627,
                                "name": "b",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7608,
                                "src": "6045:1:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "<",
                              "rightExpression": {
                                "argumentTypes": null,
                                "hexValue": "30784630",
                                "id": 7628,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "6049:4:35",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_240_by_1",
                                  "typeString": "int_const 240"
                                },
                                "value": "0xF0"
                              },
                              "src": "6045:8:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "falseBody": {
                              "condition": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                },
                                "id": 7637,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "id": 7635,
                                  "name": "b",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7608,
                                  "src": "6092:1:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "<",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "hexValue": "30784638",
                                  "id": 7636,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "6096:4:35",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_248_by_1",
                                    "typeString": "int_const 248"
                                  },
                                  "value": "0xF8"
                                },
                                "src": "6092:8:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "falseBody": {
                                "condition": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  },
                                  "id": 7645,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "id": 7643,
                                    "name": "b",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7608,
                                    "src": "6139:1:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint8",
                                      "typeString": "uint8"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "<",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "hexValue": "30784643",
                                    "id": 7644,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "6143:4:35",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_252_by_1",
                                      "typeString": "int_const 252"
                                    },
                                    "value": "0xFC"
                                  },
                                  "src": "6139:8:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "falseBody": {
                                  "id": 7655,
                                  "nodeType": "Block",
                                  "src": "6182:27:35",
                                  "statements": [
                                    {
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 7653,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                          "argumentTypes": null,
                                          "id": 7651,
                                          "name": "ptr",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 7584,
                                          "src": "6192:3:35",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "+=",
                                        "rightHandSide": {
                                          "argumentTypes": null,
                                          "hexValue": "36",
                                          "id": 7652,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "kind": "number",
                                          "lValueRequested": false,
                                          "nodeType": "Literal",
                                          "src": "6199:1:35",
                                          "subdenomination": null,
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_rational_6_by_1",
                                            "typeString": "int_const 6"
                                          },
                                          "value": "6"
                                        },
                                        "src": "6192:8:35",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "id": 7654,
                                      "nodeType": "ExpressionStatement",
                                      "src": "6192:8:35"
                                    }
                                  ]
                                },
                                "id": 7656,
                                "nodeType": "IfStatement",
                                "src": "6135:74:35",
                                "trueBody": {
                                  "id": 7650,
                                  "nodeType": "Block",
                                  "src": "6149:27:35",
                                  "statements": [
                                    {
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 7648,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                          "argumentTypes": null,
                                          "id": 7646,
                                          "name": "ptr",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 7584,
                                          "src": "6159:3:35",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "+=",
                                        "rightHandSide": {
                                          "argumentTypes": null,
                                          "hexValue": "35",
                                          "id": 7647,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "kind": "number",
                                          "lValueRequested": false,
                                          "nodeType": "Literal",
                                          "src": "6166:1:35",
                                          "subdenomination": null,
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_rational_5_by_1",
                                            "typeString": "int_const 5"
                                          },
                                          "value": "5"
                                        },
                                        "src": "6159:8:35",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "id": 7649,
                                      "nodeType": "ExpressionStatement",
                                      "src": "6159:8:35"
                                    }
                                  ]
                                }
                              },
                              "id": 7657,
                              "nodeType": "IfStatement",
                              "src": "6088:121:35",
                              "trueBody": {
                                "id": 7642,
                                "nodeType": "Block",
                                "src": "6102:27:35",
                                "statements": [
                                  {
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 7640,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "argumentTypes": null,
                                        "id": 7638,
                                        "name": "ptr",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 7584,
                                        "src": "6112:3:35",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "+=",
                                      "rightHandSide": {
                                        "argumentTypes": null,
                                        "hexValue": "34",
                                        "id": 7639,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "6119:1:35",
                                        "subdenomination": null,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_4_by_1",
                                          "typeString": "int_const 4"
                                        },
                                        "value": "4"
                                      },
                                      "src": "6112:8:35",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 7641,
                                    "nodeType": "ExpressionStatement",
                                    "src": "6112:8:35"
                                  }
                                ]
                              }
                            },
                            "id": 7658,
                            "nodeType": "IfStatement",
                            "src": "6041:168:35",
                            "trueBody": {
                              "id": 7634,
                              "nodeType": "Block",
                              "src": "6055:27:35",
                              "statements": [
                                {
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 7632,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "argumentTypes": null,
                                      "id": 7630,
                                      "name": "ptr",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 7584,
                                      "src": "6065:3:35",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "+=",
                                    "rightHandSide": {
                                      "argumentTypes": null,
                                      "hexValue": "33",
                                      "id": 7631,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "6072:1:35",
                                      "subdenomination": null,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_3_by_1",
                                        "typeString": "int_const 3"
                                      },
                                      "value": "3"
                                    },
                                    "src": "6065:8:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 7633,
                                  "nodeType": "ExpressionStatement",
                                  "src": "6065:8:35"
                                }
                              ]
                            }
                          },
                          "id": 7659,
                          "nodeType": "IfStatement",
                          "src": "5994:215:35",
                          "trueBody": {
                            "id": 7626,
                            "nodeType": "Block",
                            "src": "6008:27:35",
                            "statements": [
                              {
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 7624,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftHandSide": {
                                    "argumentTypes": null,
                                    "id": 7622,
                                    "name": "ptr",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7584,
                                    "src": "6018:3:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "Assignment",
                                  "operator": "+=",
                                  "rightHandSide": {
                                    "argumentTypes": null,
                                    "hexValue": "32",
                                    "id": 7623,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "6025:1:35",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_2_by_1",
                                      "typeString": "int_const 2"
                                    },
                                    "value": "2"
                                  },
                                  "src": "6018:8:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 7625,
                                "nodeType": "ExpressionStatement",
                                "src": "6018:8:35"
                              }
                            ]
                          }
                        },
                        "id": 7660,
                        "nodeType": "IfStatement",
                        "src": "5947:262:35",
                        "trueBody": {
                          "id": 7618,
                          "nodeType": "Block",
                          "src": "5961:27:35",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 7616,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 7614,
                                  "name": "ptr",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7584,
                                  "src": "5971:3:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "+=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "hexValue": "31",
                                  "id": 7615,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "5978:1:35",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_1_by_1",
                                    "typeString": "int_const 1"
                                  },
                                  "value": "1"
                                },
                                "src": "5971:8:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 7617,
                              "nodeType": "ExpressionStatement",
                              "src": "5971:8:35"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 7603,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 7601,
                      "name": "ptr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7584,
                      "src": "5848:3:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 7602,
                      "name": "end",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7591,
                      "src": "5854:3:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "5848:9:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 7662,
                  "initializationExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 7599,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftHandSide": {
                        "argumentTypes": null,
                        "id": 7597,
                        "name": "l",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7581,
                        "src": "5841:1:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "Assignment",
                      "operator": "=",
                      "rightHandSide": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 7598,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "5845:1:35",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "5841:5:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 7600,
                    "nodeType": "ExpressionStatement",
                    "src": "5841:5:35"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 7605,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "5859:3:35",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 7604,
                        "name": "l",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7581,
                        "src": "5859:1:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 7606,
                    "nodeType": "ExpressionStatement",
                    "src": "5859:3:35"
                  },
                  "nodeType": "ForStatement",
                  "src": "5836:379:35"
                }
              ]
            },
            "documentation": null,
            "id": 7664,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "len",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7579,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7578,
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 7664,
                  "src": "5637:17:35",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                    "typeString": "struct StringUtils.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 7577,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7338,
                    "src": "5637:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$7338_storage_ptr",
                      "typeString": "struct StringUtils.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5636:19:35"
            },
            "payable": false,
            "returnParameters": {
              "id": 7582,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7581,
                  "name": "l",
                  "nodeType": "VariableDeclaration",
                  "scope": 7664,
                  "src": "5679:9:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7580,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5679:7:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5678:11:35"
            },
            "scope": 9026,
            "src": "5624:595:35",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 7676,
              "nodeType": "Block",
              "src": "6463:32:35",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 7674,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 7671,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7666,
                        "src": "6476:4:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                          "typeString": "struct StringUtils.slice memory"
                        }
                      },
                      "id": 7672,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7335,
                      "src": "6476:9:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 7673,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "6489:1:35",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "6476:14:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 7670,
                  "id": 7675,
                  "nodeType": "Return",
                  "src": "6469:21:35"
                }
              ]
            },
            "documentation": null,
            "id": 7677,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "empty",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7667,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7666,
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 7677,
                  "src": "6415:17:35",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                    "typeString": "struct StringUtils.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 7665,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7338,
                    "src": "6415:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$7338_storage_ptr",
                      "typeString": "struct StringUtils.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6414:19:35"
            },
            "payable": false,
            "returnParameters": {
              "id": 7670,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7669,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 7677,
                  "src": "6457:4:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 7668,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "6457:4:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6456:6:35"
            },
            "scope": 9026,
            "src": "6400:95:35",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 7805,
              "nodeType": "Block",
              "src": "7004:751:35",
              "statements": [
                {
                  "assignments": [
                    7687
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7687,
                      "name": "shortest",
                      "nodeType": "VariableDeclaration",
                      "scope": 7806,
                      "src": "7010:16:35",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7686,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "7010:7:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7690,
                  "initialValue": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 7688,
                      "name": "self",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7679,
                      "src": "7029:4:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                        "typeString": "struct StringUtils.slice memory"
                      }
                    },
                    "id": 7689,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "_len",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 7335,
                    "src": "7029:9:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7010:28:35"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 7695,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 7691,
                        "name": "other",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7681,
                        "src": "7048:5:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                          "typeString": "struct StringUtils.slice memory"
                        }
                      },
                      "id": 7692,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7335,
                      "src": "7048:10:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 7693,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7679,
                        "src": "7061:4:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                          "typeString": "struct StringUtils.slice memory"
                        }
                      },
                      "id": 7694,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7335,
                      "src": "7061:9:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "7048:22:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 7701,
                  "nodeType": "IfStatement",
                  "src": "7044:49:35",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 7699,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftHandSide": {
                        "argumentTypes": null,
                        "id": 7696,
                        "name": "shortest",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7687,
                        "src": "7072:8:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "Assignment",
                      "operator": "=",
                      "rightHandSide": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 7697,
                          "name": "other",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7681,
                          "src": "7083:5:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                            "typeString": "struct StringUtils.slice memory"
                          }
                        },
                        "id": 7698,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7335,
                        "src": "7083:10:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "7072:21:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 7700,
                    "nodeType": "ExpressionStatement",
                    "src": "7072:21:35"
                  }
                },
                {
                  "assignments": [
                    7703
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7703,
                      "name": "selfptr",
                      "nodeType": "VariableDeclaration",
                      "scope": 7806,
                      "src": "7100:15:35",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7702,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "7100:7:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7706,
                  "initialValue": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 7704,
                      "name": "self",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7679,
                      "src": "7118:4:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                        "typeString": "struct StringUtils.slice memory"
                      }
                    },
                    "id": 7705,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "_ptr",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 7337,
                    "src": "7118:9:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7100:27:35"
                },
                {
                  "assignments": [
                    7708
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7708,
                      "name": "otherptr",
                      "nodeType": "VariableDeclaration",
                      "scope": 7806,
                      "src": "7133:16:35",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7707,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "7133:7:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7711,
                  "initialValue": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 7709,
                      "name": "other",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7681,
                      "src": "7152:5:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                        "typeString": "struct StringUtils.slice memory"
                      }
                    },
                    "id": 7710,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "_ptr",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 7337,
                    "src": "7152:10:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7133:29:35"
                },
                {
                  "body": {
                    "id": 7793,
                    "nodeType": "Block",
                    "src": "7217:483:35",
                    "statements": [
                      {
                        "assignments": [],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 7724,
                            "name": "a",
                            "nodeType": "VariableDeclaration",
                            "scope": 7806,
                            "src": "7225:9:35",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 7723,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "7225:7:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 7725,
                        "initialValue": null,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "7225:9:35"
                      },
                      {
                        "assignments": [],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 7727,
                            "name": "b",
                            "nodeType": "VariableDeclaration",
                            "scope": 7806,
                            "src": "7242:9:35",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 7726,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "7242:7:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 7728,
                        "initialValue": null,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "7242:9:35"
                      },
                      {
                        "externalReferences": [
                          {
                            "a": {
                              "declaration": 7724,
                              "isOffset": false,
                              "isSlot": false,
                              "src": "7278:1:35",
                              "valueSize": 1
                            }
                          },
                          {
                            "selfptr": {
                              "declaration": 7703,
                              "isOffset": false,
                              "isSlot": false,
                              "src": "7289:7:35",
                              "valueSize": 1
                            }
                          },
                          {
                            "b": {
                              "declaration": 7727,
                              "isOffset": false,
                              "isSlot": false,
                              "src": "7306:1:35",
                              "valueSize": 1
                            }
                          },
                          {
                            "otherptr": {
                              "declaration": 7708,
                              "isOffset": false,
                              "isSlot": false,
                              "src": "7317:8:35",
                              "valueSize": 1
                            }
                          }
                        ],
                        "id": 7729,
                        "nodeType": "InlineAssembly",
                        "operations": "{\n    a := mload(selfptr)\n    b := mload(otherptr)\n}",
                        "src": "7259:84:35"
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 7732,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 7730,
                            "name": "a",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7724,
                            "src": "7345:1:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 7731,
                            "name": "b",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7727,
                            "src": "7350:1:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "7345:6:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 7784,
                        "nodeType": "IfStatement",
                        "src": "7341:310:35",
                        "trueBody": {
                          "id": 7783,
                          "nodeType": "Block",
                          "src": "7353:298:35",
                          "statements": [
                            {
                              "assignments": [
                                7734
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 7734,
                                  "name": "mask",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 7806,
                                  "src": "7416:12:35",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "typeName": {
                                    "id": 7733,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "7416:7:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                }
                              ],
                              "id": 7739,
                              "initialValue": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 7737,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "UnaryOperation",
                                    "operator": "-",
                                    "prefix": true,
                                    "src": "7439:2:35",
                                    "subExpression": {
                                      "argumentTypes": null,
                                      "hexValue": "31",
                                      "id": 7736,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "7440:1:35",
                                      "subdenomination": null,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_1_by_1",
                                        "typeString": "int_const 1"
                                      },
                                      "value": "1"
                                    },
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_-1_by_1",
                                      "typeString": "int_const -1"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_-1_by_1",
                                      "typeString": "int_const -1"
                                    }
                                  ],
                                  "id": 7735,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "7431:7:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint256_$",
                                    "typeString": "type(uint256)"
                                  },
                                  "typeName": "uint256"
                                },
                                "id": 7738,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "7431:11:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "7416:26:35"
                            },
                            {
                              "condition": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 7742,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "id": 7740,
                                  "name": "shortest",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7687,
                                  "src": "7469:8:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "<",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "hexValue": "3332",
                                  "id": 7741,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "7480:2:35",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_32_by_1",
                                    "typeString": "int_const 32"
                                  },
                                  "value": "32"
                                },
                                "src": "7469:13:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "falseBody": null,
                              "id": 7762,
                              "nodeType": "IfStatement",
                              "src": "7465:86:35",
                              "trueBody": {
                                "id": 7761,
                                "nodeType": "Block",
                                "src": "7484:67:35",
                                "statements": [
                                  {
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 7759,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "argumentTypes": null,
                                        "id": 7743,
                                        "name": "mask",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 7734,
                                        "src": "7496:4:35",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "=",
                                      "rightHandSide": {
                                        "argumentTypes": null,
                                        "id": 7758,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "UnaryOperation",
                                        "operator": "~",
                                        "prefix": true,
                                        "src": "7503:37:35",
                                        "subExpression": {
                                          "argumentTypes": null,
                                          "components": [
                                            {
                                              "argumentTypes": null,
                                              "commonType": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              },
                                              "id": 7756,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "leftExpression": {
                                                "argumentTypes": null,
                                                "commonType": {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                },
                                                "id": 7754,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                  "argumentTypes": null,
                                                  "hexValue": "32",
                                                  "id": 7744,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": true,
                                                  "kind": "number",
                                                  "lValueRequested": false,
                                                  "nodeType": "Literal",
                                                  "src": "7505:1:35",
                                                  "subdenomination": null,
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_rational_2_by_1",
                                                    "typeString": "int_const 2"
                                                  },
                                                  "value": "2"
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "**",
                                                "rightExpression": {
                                                  "argumentTypes": null,
                                                  "components": [
                                                    {
                                                      "argumentTypes": null,
                                                      "commonType": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                      },
                                                      "id": 7752,
                                                      "isConstant": false,
                                                      "isLValue": false,
                                                      "isPure": false,
                                                      "lValueRequested": false,
                                                      "leftExpression": {
                                                        "argumentTypes": null,
                                                        "hexValue": "38",
                                                        "id": 7745,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "kind": "number",
                                                        "lValueRequested": false,
                                                        "nodeType": "Literal",
                                                        "src": "7509:1:35",
                                                        "subdenomination": null,
                                                        "typeDescriptions": {
                                                          "typeIdentifier": "t_rational_8_by_1",
                                                          "typeString": "int_const 8"
                                                        },
                                                        "value": "8"
                                                      },
                                                      "nodeType": "BinaryOperation",
                                                      "operator": "*",
                                                      "rightExpression": {
                                                        "argumentTypes": null,
                                                        "components": [
                                                          {
                                                            "argumentTypes": null,
                                                            "commonType": {
                                                              "typeIdentifier": "t_uint256",
                                                              "typeString": "uint256"
                                                            },
                                                            "id": 7750,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "leftExpression": {
                                                              "argumentTypes": null,
                                                              "commonType": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                              },
                                                              "id": 7748,
                                                              "isConstant": false,
                                                              "isLValue": false,
                                                              "isPure": false,
                                                              "lValueRequested": false,
                                                              "leftExpression": {
                                                                "argumentTypes": null,
                                                                "hexValue": "3332",
                                                                "id": 7746,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": true,
                                                                "kind": "number",
                                                                "lValueRequested": false,
                                                                "nodeType": "Literal",
                                                                "src": "7514:2:35",
                                                                "subdenomination": null,
                                                                "typeDescriptions": {
                                                                  "typeIdentifier": "t_rational_32_by_1",
                                                                  "typeString": "int_const 32"
                                                                },
                                                                "value": "32"
                                                              },
                                                              "nodeType": "BinaryOperation",
                                                              "operator": "-",
                                                              "rightExpression": {
                                                                "argumentTypes": null,
                                                                "id": 7747,
                                                                "name": "shortest",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 7687,
                                                                "src": "7519:8:35",
                                                                "typeDescriptions": {
                                                                  "typeIdentifier": "t_uint256",
                                                                  "typeString": "uint256"
                                                                }
                                                              },
                                                              "src": "7514:13:35",
                                                              "typeDescriptions": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                              }
                                                            },
                                                            "nodeType": "BinaryOperation",
                                                            "operator": "+",
                                                            "rightExpression": {
                                                              "argumentTypes": null,
                                                              "id": 7749,
                                                              "name": "idx",
                                                              "nodeType": "Identifier",
                                                              "overloadedDeclarations": [],
                                                              "referencedDeclaration": 7713,
                                                              "src": "7530:3:35",
                                                              "typeDescriptions": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                              }
                                                            },
                                                            "src": "7514:19:35",
                                                            "typeDescriptions": {
                                                              "typeIdentifier": "t_uint256",
                                                              "typeString": "uint256"
                                                            }
                                                          }
                                                        ],
                                                        "id": 7751,
                                                        "isConstant": false,
                                                        "isInlineArray": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "nodeType": "TupleExpression",
                                                        "src": "7513:21:35",
                                                        "typeDescriptions": {
                                                          "typeIdentifier": "t_uint256",
                                                          "typeString": "uint256"
                                                        }
                                                      },
                                                      "src": "7509:25:35",
                                                      "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                      }
                                                    }
                                                  ],
                                                  "id": 7753,
                                                  "isConstant": false,
                                                  "isInlineArray": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "lValueRequested": false,
                                                  "nodeType": "TupleExpression",
                                                  "src": "7508:27:35",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                  }
                                                },
                                                "src": "7505:30:35",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                }
                                              },
                                              "nodeType": "BinaryOperation",
                                              "operator": "-",
                                              "rightExpression": {
                                                "argumentTypes": null,
                                                "hexValue": "31",
                                                "id": 7755,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "number",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "7538:1:35",
                                                "subdenomination": null,
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_rational_1_by_1",
                                                  "typeString": "int_const 1"
                                                },
                                                "value": "1"
                                              },
                                              "src": "7505:34:35",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            }
                                          ],
                                          "id": 7757,
                                          "isConstant": false,
                                          "isInlineArray": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "nodeType": "TupleExpression",
                                          "src": "7504:36:35",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "7496:44:35",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 7760,
                                    "nodeType": "ExpressionStatement",
                                    "src": "7496:44:35"
                                  }
                                ]
                              }
                            },
                            {
                              "assignments": [
                                7764
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 7764,
                                  "name": "diff",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 7806,
                                  "src": "7560:12:35",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "typeName": {
                                    "id": 7763,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "7560:7:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                }
                              ],
                              "id": 7774,
                              "initialValue": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 7773,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "components": [
                                    {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 7767,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "argumentTypes": null,
                                        "id": 7765,
                                        "name": "a",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 7724,
                                        "src": "7576:1:35",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "&",
                                      "rightExpression": {
                                        "argumentTypes": null,
                                        "id": 7766,
                                        "name": "mask",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 7734,
                                        "src": "7580:4:35",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "7576:8:35",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "id": 7768,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "7575:10:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "-",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "components": [
                                    {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 7771,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "argumentTypes": null,
                                        "id": 7769,
                                        "name": "b",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 7727,
                                        "src": "7589:1:35",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "&",
                                      "rightExpression": {
                                        "argumentTypes": null,
                                        "id": 7770,
                                        "name": "mask",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 7734,
                                        "src": "7593:4:35",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "7589:8:35",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "id": 7772,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "7588:10:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "7575:23:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "7560:38:35"
                            },
                            {
                              "condition": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 7777,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "id": 7775,
                                  "name": "diff",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7764,
                                  "src": "7612:4:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "!=",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "hexValue": "30",
                                  "id": 7776,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "7620:1:35",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                },
                                "src": "7612:9:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "falseBody": null,
                              "id": 7782,
                              "nodeType": "IfStatement",
                              "src": "7608:34:35",
                              "trueBody": {
                                "expression": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 7779,
                                      "name": "diff",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 7764,
                                      "src": "7637:4:35",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "id": 7778,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "7630:6:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_int256_$",
                                      "typeString": "type(int256)"
                                    },
                                    "typeName": "int256"
                                  },
                                  "id": 7780,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "7630:12:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int256",
                                    "typeString": "int256"
                                  }
                                },
                                "functionReturnParameters": 7685,
                                "id": 7781,
                                "nodeType": "Return",
                                "src": "7623:19:35"
                              }
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 7787,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 7785,
                            "name": "selfptr",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7703,
                            "src": "7658:7:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "3332",
                            "id": 7786,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "7669:2:35",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_32_by_1",
                              "typeString": "int_const 32"
                            },
                            "value": "32"
                          },
                          "src": "7658:13:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 7788,
                        "nodeType": "ExpressionStatement",
                        "src": "7658:13:35"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 7791,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 7789,
                            "name": "otherptr",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7708,
                            "src": "7679:8:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "3332",
                            "id": 7790,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "7691:2:35",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_32_by_1",
                              "typeString": "int_const 32"
                            },
                            "value": "32"
                          },
                          "src": "7679:14:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 7792,
                        "nodeType": "ExpressionStatement",
                        "src": "7679:14:35"
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 7718,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 7716,
                      "name": "idx",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7713,
                      "src": "7190:3:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 7717,
                      "name": "shortest",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7687,
                      "src": "7196:8:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "7190:14:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 7794,
                  "initializationExpression": {
                    "assignments": [
                      7713
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 7713,
                        "name": "idx",
                        "nodeType": "VariableDeclaration",
                        "scope": 7806,
                        "src": "7173:11:35",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 7712,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "7173:7:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 7715,
                    "initialValue": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 7714,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "7187:1:35",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "7173:15:35"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 7721,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftHandSide": {
                        "argumentTypes": null,
                        "id": 7719,
                        "name": "idx",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7713,
                        "src": "7206:3:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "Assignment",
                      "operator": "+=",
                      "rightHandSide": {
                        "argumentTypes": null,
                        "hexValue": "3332",
                        "id": 7720,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7213:2:35",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_32_by_1",
                          "typeString": "int_const 32"
                        },
                        "value": "32"
                      },
                      "src": "7206:9:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 7722,
                    "nodeType": "ExpressionStatement",
                    "src": "7206:9:35"
                  },
                  "nodeType": "ForStatement",
                  "src": "7168:532:35"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    },
                    "id": 7803,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 7796,
                            "name": "self",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7679,
                            "src": "7719:4:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                              "typeString": "struct StringUtils.slice memory"
                            }
                          },
                          "id": 7797,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "_len",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 7335,
                          "src": "7719:9:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 7795,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "7712:6:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_int256_$",
                          "typeString": "type(int256)"
                        },
                        "typeName": "int256"
                      },
                      "id": 7798,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "7712:17:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_int256",
                        "typeString": "int256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "-",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 7800,
                            "name": "other",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7681,
                            "src": "7739:5:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                              "typeString": "struct StringUtils.slice memory"
                            }
                          },
                          "id": 7801,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "_len",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 7335,
                          "src": "7739:10:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 7799,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "7732:6:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_int256_$",
                          "typeString": "type(int256)"
                        },
                        "typeName": "int256"
                      },
                      "id": 7802,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "7732:18:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_int256",
                        "typeString": "int256"
                      }
                    },
                    "src": "7712:38:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    }
                  },
                  "functionReturnParameters": 7685,
                  "id": 7804,
                  "nodeType": "Return",
                  "src": "7705:45:35"
                }
              ]
            },
            "documentation": null,
            "id": 7806,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "compare",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7682,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7679,
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 7806,
                  "src": "6920:17:35",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                    "typeString": "struct StringUtils.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 7678,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7338,
                    "src": "6920:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$7338_storage_ptr",
                      "typeString": "struct StringUtils.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7681,
                  "name": "other",
                  "nodeType": "VariableDeclaration",
                  "scope": 7806,
                  "src": "6939:18:35",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                    "typeString": "struct StringUtils.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 7680,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7338,
                    "src": "6939:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$7338_storage_ptr",
                      "typeString": "struct StringUtils.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6919:39:35"
            },
            "payable": false,
            "returnParameters": {
              "id": 7685,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7684,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 7806,
                  "src": "6994:6:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_int256",
                    "typeString": "int256"
                  },
                  "typeName": {
                    "id": 7683,
                    "name": "int256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6994:6:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6993:8:35"
            },
            "scope": 9026,
            "src": "6903:852:35",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 7822,
              "nodeType": "Block",
              "src": "8083:43:35",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    },
                    "id": 7820,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 7816,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7808,
                          "src": "8104:4:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                            "typeString": "struct StringUtils.slice memory"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 7817,
                          "name": "other",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7810,
                          "src": "8110:5:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                            "typeString": "struct StringUtils.slice memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                            "typeString": "struct StringUtils.slice memory"
                          },
                          {
                            "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                            "typeString": "struct StringUtils.slice memory"
                          }
                        ],
                        "id": 7815,
                        "name": "compare",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7806,
                        "src": "8096:7:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_struct$_slice_$7338_memory_ptr_$_t_struct$_slice_$7338_memory_ptr_$returns$_t_int256_$",
                          "typeString": "function (struct StringUtils.slice memory,struct StringUtils.slice memory) pure returns (int256)"
                        }
                      },
                      "id": 7818,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "8096:20:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_int256",
                        "typeString": "int256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 7819,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "8120:1:35",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "8096:25:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 7814,
                  "id": 7821,
                  "nodeType": "Return",
                  "src": "8089:32:35"
                }
              ]
            },
            "documentation": null,
            "id": 7823,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "equals",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7811,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7808,
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 7823,
                  "src": "8001:17:35",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                    "typeString": "struct StringUtils.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 7807,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7338,
                    "src": "8001:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$7338_storage_ptr",
                      "typeString": "struct StringUtils.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7810,
                  "name": "other",
                  "nodeType": "VariableDeclaration",
                  "scope": 7823,
                  "src": "8020:18:35",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                    "typeString": "struct StringUtils.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 7809,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7338,
                    "src": "8020:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$7338_storage_ptr",
                      "typeString": "struct StringUtils.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8000:39:35"
            },
            "payable": false,
            "returnParameters": {
              "id": 7814,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7813,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 7823,
                  "src": "8075:4:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 7812,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "8075:4:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8074:6:35"
            },
            "scope": 9026,
            "src": "7985:141:35",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 7940,
              "nodeType": "Block",
              "src": "8510:665:35",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7837,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 7832,
                        "name": "rune",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7827,
                        "src": "8516:4:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                          "typeString": "struct StringUtils.slice memory"
                        }
                      },
                      "id": 7834,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "_ptr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7337,
                      "src": "8516:9:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 7835,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7825,
                        "src": "8528:4:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                          "typeString": "struct StringUtils.slice memory"
                        }
                      },
                      "id": 7836,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_ptr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7337,
                      "src": "8528:9:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "8516:21:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 7838,
                  "nodeType": "ExpressionStatement",
                  "src": "8516:21:35"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 7842,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 7839,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7825,
                        "src": "8548:4:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                          "typeString": "struct StringUtils.slice memory"
                        }
                      },
                      "id": 7840,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7335,
                      "src": "8548:9:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 7841,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "8561:1:35",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "8548:14:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 7852,
                  "nodeType": "IfStatement",
                  "src": "8544:67:35",
                  "trueBody": {
                    "id": 7851,
                    "nodeType": "Block",
                    "src": "8564:47:35",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 7847,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 7843,
                              "name": "rune",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7827,
                              "src": "8572:4:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                                "typeString": "struct StringUtils.slice memory"
                              }
                            },
                            "id": 7845,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "_len",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 7335,
                            "src": "8572:9:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 7846,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "8584:1:35",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "8572:13:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 7848,
                        "nodeType": "ExpressionStatement",
                        "src": "8572:13:35"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 7849,
                          "name": "rune",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7827,
                          "src": "8600:4:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                            "typeString": "struct StringUtils.slice memory"
                          }
                        },
                        "functionReturnParameters": 7831,
                        "id": 7850,
                        "nodeType": "Return",
                        "src": "8593:11:35"
                      }
                    ]
                  }
                },
                {
                  "assignments": [],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7854,
                      "name": "l",
                      "nodeType": "VariableDeclaration",
                      "scope": 7941,
                      "src": "8617:9:35",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7853,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "8617:7:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7855,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8617:9:35"
                },
                {
                  "assignments": [],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7857,
                      "name": "b",
                      "nodeType": "VariableDeclaration",
                      "scope": 7941,
                      "src": "8632:9:35",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7856,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "8632:7:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7858,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8632:9:35"
                },
                {
                  "externalReferences": [
                    {
                      "b": {
                        "declaration": 7857,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "8722:1:35",
                        "valueSize": 1
                      }
                    },
                    {
                      "self": {
                        "declaration": 7825,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "8751:4:35",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 7859,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    b := and(mload(sub(mload(add(self, 32)), 31)), 0xFF)\n}",
                  "src": "8705:82:35"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 7862,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 7860,
                      "name": "b",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7857,
                      "src": "8789:1:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30783830",
                      "id": 7861,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "8793:4:35",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_128_by_1",
                        "typeString": "int_const 128"
                      },
                      "value": "0x80"
                    },
                    "src": "8789:8:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "condition": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 7870,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 7868,
                        "name": "b",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7857,
                        "src": "8829:1:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "<",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "30784530",
                        "id": 7869,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "8833:4:35",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_224_by_1",
                          "typeString": "int_const 224"
                        },
                        "value": "0xE0"
                      },
                      "src": "8829:8:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseBody": {
                      "condition": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 7878,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 7876,
                          "name": "b",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7857,
                          "src": "8869:1:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30784630",
                          "id": 7877,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "8873:4:35",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_240_by_1",
                            "typeString": "int_const 240"
                          },
                          "value": "0xF0"
                        },
                        "src": "8869:8:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "falseBody": {
                        "id": 7888,
                        "nodeType": "Block",
                        "src": "8905:20:35",
                        "statements": [
                          {
                            "expression": {
                              "argumentTypes": null,
                              "id": 7886,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "argumentTypes": null,
                                "id": 7884,
                                "name": "l",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7854,
                                "src": "8913:1:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "argumentTypes": null,
                                "hexValue": "34",
                                "id": 7885,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "8917:1:35",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_4_by_1",
                                  "typeString": "int_const 4"
                                },
                                "value": "4"
                              },
                              "src": "8913:5:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 7887,
                            "nodeType": "ExpressionStatement",
                            "src": "8913:5:35"
                          }
                        ]
                      },
                      "id": 7889,
                      "nodeType": "IfStatement",
                      "src": "8865:60:35",
                      "trueBody": {
                        "id": 7883,
                        "nodeType": "Block",
                        "src": "8879:20:35",
                        "statements": [
                          {
                            "expression": {
                              "argumentTypes": null,
                              "id": 7881,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "argumentTypes": null,
                                "id": 7879,
                                "name": "l",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7854,
                                "src": "8887:1:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "argumentTypes": null,
                                "hexValue": "33",
                                "id": 7880,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "8891:1:35",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_3_by_1",
                                  "typeString": "int_const 3"
                                },
                                "value": "3"
                              },
                              "src": "8887:5:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 7882,
                            "nodeType": "ExpressionStatement",
                            "src": "8887:5:35"
                          }
                        ]
                      }
                    },
                    "id": 7890,
                    "nodeType": "IfStatement",
                    "src": "8825:100:35",
                    "trueBody": {
                      "id": 7875,
                      "nodeType": "Block",
                      "src": "8839:20:35",
                      "statements": [
                        {
                          "expression": {
                            "argumentTypes": null,
                            "id": 7873,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "argumentTypes": null,
                              "id": 7871,
                              "name": "l",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7854,
                              "src": "8847:1:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "argumentTypes": null,
                              "hexValue": "32",
                              "id": 7872,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "8851:1:35",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_2_by_1",
                                "typeString": "int_const 2"
                              },
                              "value": "2"
                            },
                            "src": "8847:5:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 7874,
                          "nodeType": "ExpressionStatement",
                          "src": "8847:5:35"
                        }
                      ]
                    }
                  },
                  "id": 7891,
                  "nodeType": "IfStatement",
                  "src": "8785:140:35",
                  "trueBody": {
                    "id": 7867,
                    "nodeType": "Block",
                    "src": "8799:20:35",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 7865,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 7863,
                            "name": "l",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7854,
                            "src": "8807:1:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "31",
                            "id": 7864,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "8811:1:35",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "src": "8807:5:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 7866,
                        "nodeType": "ExpressionStatement",
                        "src": "8807:5:35"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 7895,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 7892,
                      "name": "l",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7854,
                      "src": "8973:1:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 7893,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7825,
                        "src": "8977:4:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                          "typeString": "struct StringUtils.slice memory"
                        }
                      },
                      "id": 7894,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7335,
                      "src": "8977:9:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "8973:13:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 7919,
                  "nodeType": "IfStatement",
                  "src": "8969:125:35",
                  "trueBody": {
                    "id": 7918,
                    "nodeType": "Block",
                    "src": "8988:106:35",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 7901,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 7896,
                              "name": "rune",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7827,
                              "src": "8996:4:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                                "typeString": "struct StringUtils.slice memory"
                              }
                            },
                            "id": 7898,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "_len",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 7335,
                            "src": "8996:9:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 7899,
                              "name": "self",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7825,
                              "src": "9008:4:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                                "typeString": "struct StringUtils.slice memory"
                              }
                            },
                            "id": 7900,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "_len",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 7335,
                            "src": "9008:9:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "8996:21:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 7902,
                        "nodeType": "ExpressionStatement",
                        "src": "8996:21:35"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 7908,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 7903,
                              "name": "self",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7825,
                              "src": "9025:4:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                                "typeString": "struct StringUtils.slice memory"
                              }
                            },
                            "id": 7905,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "_ptr",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 7337,
                            "src": "9025:9:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 7906,
                              "name": "self",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7825,
                              "src": "9038:4:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                                "typeString": "struct StringUtils.slice memory"
                              }
                            },
                            "id": 7907,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "_len",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 7335,
                            "src": "9038:9:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "9025:22:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 7909,
                        "nodeType": "ExpressionStatement",
                        "src": "9025:22:35"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 7914,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 7910,
                              "name": "self",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7825,
                              "src": "9055:4:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                                "typeString": "struct StringUtils.slice memory"
                              }
                            },
                            "id": 7912,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "_len",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 7335,
                            "src": "9055:9:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 7913,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "9067:1:35",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "9055:13:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 7915,
                        "nodeType": "ExpressionStatement",
                        "src": "9055:13:35"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 7916,
                          "name": "rune",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7827,
                          "src": "9083:4:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                            "typeString": "struct StringUtils.slice memory"
                          }
                        },
                        "functionReturnParameters": 7831,
                        "id": 7917,
                        "nodeType": "Return",
                        "src": "9076:11:35"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7924,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 7920,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7825,
                        "src": "9100:4:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                          "typeString": "struct StringUtils.slice memory"
                        }
                      },
                      "id": 7922,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "_ptr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7337,
                      "src": "9100:9:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "+=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 7923,
                      "name": "l",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7854,
                      "src": "9113:1:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "9100:14:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 7925,
                  "nodeType": "ExpressionStatement",
                  "src": "9100:14:35"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7930,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 7926,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7825,
                        "src": "9120:4:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                          "typeString": "struct StringUtils.slice memory"
                        }
                      },
                      "id": 7928,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7335,
                      "src": "9120:9:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "-=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 7929,
                      "name": "l",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7854,
                      "src": "9133:1:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "9120:14:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 7931,
                  "nodeType": "ExpressionStatement",
                  "src": "9120:14:35"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7936,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 7932,
                        "name": "rune",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7827,
                        "src": "9140:4:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                          "typeString": "struct StringUtils.slice memory"
                        }
                      },
                      "id": 7934,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7335,
                      "src": "9140:9:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 7935,
                      "name": "l",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7854,
                      "src": "9152:1:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "9140:13:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 7937,
                  "nodeType": "ExpressionStatement",
                  "src": "9140:13:35"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7938,
                    "name": "rune",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 7827,
                    "src": "9166:4:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                      "typeString": "struct StringUtils.slice memory"
                    }
                  },
                  "functionReturnParameters": 7831,
                  "id": 7939,
                  "nodeType": "Return",
                  "src": "9159:11:35"
                }
              ]
            },
            "documentation": null,
            "id": 7941,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "nextRune",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7828,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7825,
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 7941,
                  "src": "8421:17:35",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                    "typeString": "struct StringUtils.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 7824,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7338,
                    "src": "8421:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$7338_storage_ptr",
                      "typeString": "struct StringUtils.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7827,
                  "name": "rune",
                  "nodeType": "VariableDeclaration",
                  "scope": 7941,
                  "src": "8440:17:35",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                    "typeString": "struct StringUtils.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 7826,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7338,
                    "src": "8440:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$7338_storage_ptr",
                      "typeString": "struct StringUtils.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8420:38:35"
            },
            "payable": false,
            "returnParameters": {
              "id": 7831,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7830,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 7941,
                  "src": "8494:5:35",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                    "typeString": "struct StringUtils.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 7829,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7338,
                    "src": "8494:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$7338_storage_ptr",
                      "typeString": "struct StringUtils.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8493:14:35"
            },
            "scope": 9026,
            "src": "8403:772:35",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 7953,
              "nodeType": "Block",
              "src": "9493:30:35",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7949,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7943,
                        "src": "9508:4:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                          "typeString": "struct StringUtils.slice memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7950,
                        "name": "ret",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7946,
                        "src": "9514:3:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                          "typeString": "struct StringUtils.slice memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                          "typeString": "struct StringUtils.slice memory"
                        },
                        {
                          "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                          "typeString": "struct StringUtils.slice memory"
                        }
                      ],
                      "id": 7948,
                      "name": "nextRune",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        7941,
                        7954
                      ],
                      "referencedDeclaration": 7941,
                      "src": "9499:8:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_struct$_slice_$7338_memory_ptr_$_t_struct$_slice_$7338_memory_ptr_$returns$_t_struct$_slice_$7338_memory_ptr_$",
                        "typeString": "function (struct StringUtils.slice memory,struct StringUtils.slice memory) pure returns (struct StringUtils.slice memory)"
                      }
                    },
                    "id": 7951,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9499:19:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                      "typeString": "struct StringUtils.slice memory"
                    }
                  },
                  "id": 7952,
                  "nodeType": "ExpressionStatement",
                  "src": "9499:19:35"
                }
              ]
            },
            "documentation": null,
            "id": 7954,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "nextRune",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7944,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7943,
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 7954,
                  "src": "9419:17:35",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                    "typeString": "struct StringUtils.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 7942,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7338,
                    "src": "9419:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$7338_storage_ptr",
                      "typeString": "struct StringUtils.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9418:19:35"
            },
            "payable": false,
            "returnParameters": {
              "id": 7947,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7946,
                  "name": "ret",
                  "nodeType": "VariableDeclaration",
                  "scope": 7954,
                  "src": "9473:16:35",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                    "typeString": "struct StringUtils.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 7945,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7338,
                    "src": "9473:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$7338_storage_ptr",
                      "typeString": "struct StringUtils.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9472:18:35"
            },
            "scope": 9026,
            "src": "9401:122:35",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 8100,
              "nodeType": "Block",
              "src": "9775:855:35",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 7964,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 7961,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7956,
                        "src": "9785:4:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                          "typeString": "struct StringUtils.slice memory"
                        }
                      },
                      "id": 7962,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7335,
                      "src": "9785:9:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 7963,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "9798:1:35",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "9785:14:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 7968,
                  "nodeType": "IfStatement",
                  "src": "9781:43:35",
                  "trueBody": {
                    "id": 7967,
                    "nodeType": "Block",
                    "src": "9801:23:35",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 7965,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "9816:1:35",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "functionReturnParameters": 7960,
                        "id": 7966,
                        "nodeType": "Return",
                        "src": "9809:8:35"
                      }
                    ]
                  }
                },
                {
                  "assignments": [],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7970,
                      "name": "word",
                      "nodeType": "VariableDeclaration",
                      "scope": 8101,
                      "src": "9830:12:35",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7969,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "9830:7:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7971,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "9830:12:35"
                },
                {
                  "assignments": [],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7973,
                      "name": "length",
                      "nodeType": "VariableDeclaration",
                      "scope": 8101,
                      "src": "9848:14:35",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7972,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "9848:7:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7974,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "9848:14:35"
                },
                {
                  "assignments": [
                    7976
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7976,
                      "name": "divisor",
                      "nodeType": "VariableDeclaration",
                      "scope": 8101,
                      "src": "9868:15:35",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7975,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "9868:7:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7980,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_rational_452312848583266388373324160190187140051835877600158453279131187530910662656_by_1",
                      "typeString": "int_const 4523...(67 digits omitted)...2656"
                    },
                    "id": 7979,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "hexValue": "32",
                      "id": 7977,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "9886:1:35",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_2_by_1",
                        "typeString": "int_const 2"
                      },
                      "value": "2"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "**",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "323438",
                      "id": 7978,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "9889:3:35",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_248_by_1",
                        "typeString": "int_const 248"
                      },
                      "value": "248"
                    },
                    "src": "9886:6:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_452312848583266388373324160190187140051835877600158453279131187530910662656_by_1",
                      "typeString": "int_const 4523...(67 digits omitted)...2656"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "9868:24:35"
                },
                {
                  "externalReferences": [
                    {
                      "word": {
                        "declaration": 7970,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "9956:4:35",
                        "valueSize": 1
                      }
                    },
                    {
                      "self": {
                        "declaration": 7956,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "9980:4:35",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 7981,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    word := mload(mload(add(self, 32)))\n}",
                  "src": "9939:70:35"
                },
                {
                  "assignments": [
                    7983
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7983,
                      "name": "b",
                      "nodeType": "VariableDeclaration",
                      "scope": 8101,
                      "src": "10002:9:35",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7982,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "10002:7:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7987,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 7986,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 7984,
                      "name": "word",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7970,
                      "src": "10014:4:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "/",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 7985,
                      "name": "divisor",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7976,
                      "src": "10021:7:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "10014:14:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "10002:26:35"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 7990,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 7988,
                      "name": "b",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7983,
                      "src": "10038:1:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30783830",
                      "id": 7989,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "10042:4:35",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_128_by_1",
                        "typeString": "int_const 128"
                      },
                      "value": "0x80"
                    },
                    "src": "10038:8:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "condition": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 8002,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 8000,
                        "name": "b",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7983,
                        "src": "10098:1:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "<",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "30784530",
                        "id": 8001,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "10102:4:35",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_224_by_1",
                          "typeString": "int_const 224"
                        },
                        "value": "0xE0"
                      },
                      "src": "10098:8:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseBody": {
                      "condition": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 8016,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 8014,
                          "name": "b",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7983,
                          "src": "10165:1:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30784630",
                          "id": 8015,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "10169:4:35",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_240_by_1",
                            "typeString": "int_const 240"
                          },
                          "value": "0xF0"
                        },
                        "src": "10165:8:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "falseBody": {
                        "id": 8038,
                        "nodeType": "Block",
                        "src": "10228:47:35",
                        "statements": [
                          {
                            "expression": {
                              "argumentTypes": null,
                              "id": 8032,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "argumentTypes": null,
                                "id": 8028,
                                "name": "ret",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7959,
                                "src": "10236:3:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 8031,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "id": 8029,
                                  "name": "b",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7983,
                                  "src": "10242:1:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "&",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "hexValue": "30783037",
                                  "id": 8030,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "10246:4:35",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_7_by_1",
                                    "typeString": "int_const 7"
                                  },
                                  "value": "0x07"
                                },
                                "src": "10242:8:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "10236:14:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 8033,
                            "nodeType": "ExpressionStatement",
                            "src": "10236:14:35"
                          },
                          {
                            "expression": {
                              "argumentTypes": null,
                              "id": 8036,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "argumentTypes": null,
                                "id": 8034,
                                "name": "length",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7973,
                                "src": "10258:6:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "argumentTypes": null,
                                "hexValue": "34",
                                "id": 8035,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "10267:1:35",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_4_by_1",
                                  "typeString": "int_const 4"
                                },
                                "value": "4"
                              },
                              "src": "10258:10:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 8037,
                            "nodeType": "ExpressionStatement",
                            "src": "10258:10:35"
                          }
                        ]
                      },
                      "id": 8039,
                      "nodeType": "IfStatement",
                      "src": "10161:114:35",
                      "trueBody": {
                        "id": 8027,
                        "nodeType": "Block",
                        "src": "10175:47:35",
                        "statements": [
                          {
                            "expression": {
                              "argumentTypes": null,
                              "id": 8021,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "argumentTypes": null,
                                "id": 8017,
                                "name": "ret",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7959,
                                "src": "10183:3:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 8020,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "id": 8018,
                                  "name": "b",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7983,
                                  "src": "10189:1:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "&",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "hexValue": "30783046",
                                  "id": 8019,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "10193:4:35",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_15_by_1",
                                    "typeString": "int_const 15"
                                  },
                                  "value": "0x0F"
                                },
                                "src": "10189:8:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "10183:14:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 8022,
                            "nodeType": "ExpressionStatement",
                            "src": "10183:14:35"
                          },
                          {
                            "expression": {
                              "argumentTypes": null,
                              "id": 8025,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "argumentTypes": null,
                                "id": 8023,
                                "name": "length",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7973,
                                "src": "10205:6:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "argumentTypes": null,
                                "hexValue": "33",
                                "id": 8024,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "10214:1:35",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_3_by_1",
                                  "typeString": "int_const 3"
                                },
                                "value": "3"
                              },
                              "src": "10205:10:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 8026,
                            "nodeType": "ExpressionStatement",
                            "src": "10205:10:35"
                          }
                        ]
                      }
                    },
                    "id": 8040,
                    "nodeType": "IfStatement",
                    "src": "10094:181:35",
                    "trueBody": {
                      "id": 8013,
                      "nodeType": "Block",
                      "src": "10108:47:35",
                      "statements": [
                        {
                          "expression": {
                            "argumentTypes": null,
                            "id": 8007,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "argumentTypes": null,
                              "id": 8003,
                              "name": "ret",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7959,
                              "src": "10116:3:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 8006,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 8004,
                                "name": "b",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7983,
                                "src": "10122:1:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "&",
                              "rightExpression": {
                                "argumentTypes": null,
                                "hexValue": "30783146",
                                "id": 8005,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "10126:4:35",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_31_by_1",
                                  "typeString": "int_const 31"
                                },
                                "value": "0x1F"
                              },
                              "src": "10122:8:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "10116:14:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 8008,
                          "nodeType": "ExpressionStatement",
                          "src": "10116:14:35"
                        },
                        {
                          "expression": {
                            "argumentTypes": null,
                            "id": 8011,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "argumentTypes": null,
                              "id": 8009,
                              "name": "length",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7973,
                              "src": "10138:6:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "argumentTypes": null,
                              "hexValue": "32",
                              "id": 8010,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "10147:1:35",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_2_by_1",
                                "typeString": "int_const 2"
                              },
                              "value": "2"
                            },
                            "src": "10138:10:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 8012,
                          "nodeType": "ExpressionStatement",
                          "src": "10138:10:35"
                        }
                      ]
                    }
                  },
                  "id": 8041,
                  "nodeType": "IfStatement",
                  "src": "10034:241:35",
                  "trueBody": {
                    "id": 7999,
                    "nodeType": "Block",
                    "src": "10048:40:35",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 7993,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 7991,
                            "name": "ret",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7959,
                            "src": "10056:3:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 7992,
                            "name": "b",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7983,
                            "src": "10062:1:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "10056:7:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 7994,
                        "nodeType": "ExpressionStatement",
                        "src": "10056:7:35"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 7997,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 7995,
                            "name": "length",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7973,
                            "src": "10071:6:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "31",
                            "id": 7996,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "10080:1:35",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "src": "10071:10:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 7998,
                        "nodeType": "ExpressionStatement",
                        "src": "10071:10:35"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 8045,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 8042,
                      "name": "length",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7973,
                      "src": "10323:6:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 8043,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7956,
                        "src": "10332:4:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                          "typeString": "struct StringUtils.slice memory"
                        }
                      },
                      "id": 8044,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7335,
                      "src": "10332:9:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "10323:18:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 8049,
                  "nodeType": "IfStatement",
                  "src": "10319:47:35",
                  "trueBody": {
                    "id": 8048,
                    "nodeType": "Block",
                    "src": "10343:23:35",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 8046,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "10358:1:35",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "functionReturnParameters": 7960,
                        "id": 8047,
                        "nodeType": "Return",
                        "src": "10351:8:35"
                      }
                    ]
                  }
                },
                {
                  "body": {
                    "id": 8096,
                    "nodeType": "Block",
                    "src": "10409:200:35",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 8064,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 8060,
                            "name": "divisor",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7976,
                            "src": "10417:7:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 8063,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "id": 8061,
                              "name": "divisor",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7976,
                              "src": "10427:7:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "/",
                            "rightExpression": {
                              "argumentTypes": null,
                              "hexValue": "323536",
                              "id": 8062,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "10437:3:35",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_256_by_1",
                                "typeString": "int_const 256"
                              },
                              "value": "256"
                            },
                            "src": "10427:13:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "10417:23:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 8065,
                        "nodeType": "ExpressionStatement",
                        "src": "10417:23:35"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 8073,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 8066,
                            "name": "b",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7983,
                            "src": "10448:1:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 8072,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "components": [
                                {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 8069,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "id": 8067,
                                    "name": "word",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7970,
                                    "src": "10453:4:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "/",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "id": 8068,
                                    "name": "divisor",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7976,
                                    "src": "10460:7:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "10453:14:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "id": 8070,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "10452:16:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "&",
                            "rightExpression": {
                              "argumentTypes": null,
                              "hexValue": "30784646",
                              "id": 8071,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "10471:4:35",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_255_by_1",
                                "typeString": "int_const 255"
                              },
                              "value": "0xFF"
                            },
                            "src": "10452:23:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "10448:27:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 8074,
                        "nodeType": "ExpressionStatement",
                        "src": "10448:27:35"
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 8079,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 8077,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "id": 8075,
                              "name": "b",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7983,
                              "src": "10487:1:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "&",
                            "rightExpression": {
                              "argumentTypes": null,
                              "hexValue": "30784330",
                              "id": 8076,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "10491:4:35",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_192_by_1",
                                "typeString": "int_const 192"
                              },
                              "value": "0xC0"
                            },
                            "src": "10487:8:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30783830",
                            "id": 8078,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "10499:4:35",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_128_by_1",
                              "typeString": "int_const 128"
                            },
                            "value": "0x80"
                          },
                          "src": "10487:16:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 8083,
                        "nodeType": "IfStatement",
                        "src": "10483:83:35",
                        "trueBody": {
                          "id": 8082,
                          "nodeType": "Block",
                          "src": "10505:61:35",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 8080,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "10556:1:35",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "functionReturnParameters": 7960,
                              "id": 8081,
                              "nodeType": "Return",
                              "src": "10549:8:35"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 8094,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 8084,
                            "name": "ret",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7959,
                            "src": "10573:3:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 8093,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "components": [
                                {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 8087,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "id": 8085,
                                    "name": "ret",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7959,
                                    "src": "10580:3:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "*",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "hexValue": "3634",
                                    "id": 8086,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "10586:2:35",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_64_by_1",
                                      "typeString": "int_const 64"
                                    },
                                    "value": "64"
                                  },
                                  "src": "10580:8:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "id": 8088,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "10579:10:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "|",
                            "rightExpression": {
                              "argumentTypes": null,
                              "components": [
                                {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 8091,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "id": 8089,
                                    "name": "b",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7983,
                                    "src": "10593:1:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "&",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "hexValue": "30783346",
                                    "id": 8090,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "10597:4:35",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_63_by_1",
                                      "typeString": "int_const 63"
                                    },
                                    "value": "0x3F"
                                  },
                                  "src": "10593:8:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "id": 8092,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "10592:10:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "10579:23:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "10573:29:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 8095,
                        "nodeType": "ExpressionStatement",
                        "src": "10573:29:35"
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 8056,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 8054,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8051,
                      "src": "10392:1:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 8055,
                      "name": "length",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7973,
                      "src": "10396:6:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "10392:10:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 8097,
                  "initializationExpression": {
                    "assignments": [
                      8051
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 8051,
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "scope": 8101,
                        "src": "10377:9:35",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 8050,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "10377:7:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 8053,
                    "initialValue": {
                      "argumentTypes": null,
                      "hexValue": "31",
                      "id": 8052,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "10389:1:35",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "10377:13:35"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 8058,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "10404:3:35",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 8057,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8051,
                        "src": "10404:1:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 8059,
                    "nodeType": "ExpressionStatement",
                    "src": "10404:3:35"
                  },
                  "nodeType": "ForStatement",
                  "src": "10372:237:35"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8098,
                    "name": "ret",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 7959,
                    "src": "10622:3:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 7960,
                  "id": 8099,
                  "nodeType": "Return",
                  "src": "10615:10:35"
                }
              ]
            },
            "documentation": null,
            "id": 8101,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "ord",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7957,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7956,
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 8101,
                  "src": "9720:17:35",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                    "typeString": "struct StringUtils.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 7955,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7338,
                    "src": "9720:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$7338_storage_ptr",
                      "typeString": "struct StringUtils.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9719:19:35"
            },
            "payable": false,
            "returnParameters": {
              "id": 7960,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7959,
                  "name": "ret",
                  "nodeType": "VariableDeclaration",
                  "scope": 8101,
                  "src": "9762:11:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7958,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9762:7:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9761:13:35"
            },
            "scope": 9026,
            "src": "9707:923:35",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 8109,
              "nodeType": "Block",
              "src": "10840:84:35",
              "statements": [
                {
                  "externalReferences": [
                    {
                      "self": {
                        "declaration": 8103,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "10908:4:35",
                        "valueSize": 1
                      }
                    },
                    {
                      "ret": {
                        "declaration": 8106,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "10863:3:35",
                        "valueSize": 1
                      }
                    },
                    {
                      "self": {
                        "declaration": 8103,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "10890:4:35",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 8108,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    ret := keccak256(mload(add(self, 32)), mload(self))\n}",
                  "src": "10846:78:35"
                }
              ]
            },
            "documentation": null,
            "id": 8110,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "keccak",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8104,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8103,
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 8110,
                  "src": "10785:17:35",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                    "typeString": "struct StringUtils.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8102,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7338,
                    "src": "10785:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$7338_storage_ptr",
                      "typeString": "struct StringUtils.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10784:19:35"
            },
            "payable": false,
            "returnParameters": {
              "id": 8107,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8106,
                  "name": "ret",
                  "nodeType": "VariableDeclaration",
                  "scope": 8110,
                  "src": "10827:11:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 8105,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "10827:7:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10826:13:35"
            },
            "scope": 9026,
            "src": "10769:155:35",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 8143,
              "nodeType": "Block",
              "src": "11262:386:35",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 8123,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 8119,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8112,
                        "src": "11272:4:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                          "typeString": "struct StringUtils.slice memory"
                        }
                      },
                      "id": 8120,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7335,
                      "src": "11272:9:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 8121,
                        "name": "needle",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8114,
                        "src": "11284:6:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                          "typeString": "struct StringUtils.slice memory"
                        }
                      },
                      "id": 8122,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7335,
                      "src": "11284:11:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "11272:23:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 8127,
                  "nodeType": "IfStatement",
                  "src": "11268:56:35",
                  "trueBody": {
                    "id": 8126,
                    "nodeType": "Block",
                    "src": "11297:27:35",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "66616c7365",
                          "id": 8124,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "11312:5:35",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "false"
                        },
                        "functionReturnParameters": 8118,
                        "id": 8125,
                        "nodeType": "Return",
                        "src": "11305:12:35"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 8132,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 8128,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8112,
                        "src": "11334:4:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                          "typeString": "struct StringUtils.slice memory"
                        }
                      },
                      "id": 8129,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_ptr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7337,
                      "src": "11334:9:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 8130,
                        "name": "needle",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8114,
                        "src": "11347:6:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                          "typeString": "struct StringUtils.slice memory"
                        }
                      },
                      "id": 8131,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_ptr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7337,
                      "src": "11347:11:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "11334:24:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 8136,
                  "nodeType": "IfStatement",
                  "src": "11330:56:35",
                  "trueBody": {
                    "id": 8135,
                    "nodeType": "Block",
                    "src": "11360:26:35",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "74727565",
                          "id": 8133,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "11375:4:35",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        "functionReturnParameters": 8118,
                        "id": 8134,
                        "nodeType": "Return",
                        "src": "11368:11:35"
                      }
                    ]
                  }
                },
                {
                  "assignments": [],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8138,
                      "name": "equal",
                      "nodeType": "VariableDeclaration",
                      "scope": 8144,
                      "src": "11392:10:35",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 8137,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "11392:4:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8139,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "11392:10:35"
                },
                {
                  "externalReferences": [
                    {
                      "needle": {
                        "declaration": 8114,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "11445:6:35",
                        "valueSize": 1
                      }
                    },
                    {
                      "self": {
                        "declaration": 8112,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "11484:4:35",
                        "valueSize": 1
                      }
                    },
                    {
                      "equal": {
                        "declaration": 8138,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "11551:5:35",
                        "valueSize": 1
                      }
                    },
                    {
                      "needle": {
                        "declaration": 8114,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "11530:6:35",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 8140,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    let length := mload(needle)\n    let selfptr := mload(add(self, 0x20))\n    let needleptr := mload(add(needle, 0x20))\n    equal := eq(keccak256(selfptr, length), keccak256(needleptr, length))\n}",
                  "src": "11408:229:35"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8141,
                    "name": "equal",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8138,
                    "src": "11638:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 8118,
                  "id": 8142,
                  "nodeType": "Return",
                  "src": "11631:12:35"
                }
              ]
            },
            "documentation": null,
            "id": 8144,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "startsWith",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8115,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8112,
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 8144,
                  "src": "11179:17:35",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                    "typeString": "struct StringUtils.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8111,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7338,
                    "src": "11179:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$7338_storage_ptr",
                      "typeString": "struct StringUtils.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8114,
                  "name": "needle",
                  "nodeType": "VariableDeclaration",
                  "scope": 8144,
                  "src": "11198:19:35",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                    "typeString": "struct StringUtils.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8113,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7338,
                    "src": "11198:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$7338_storage_ptr",
                      "typeString": "struct StringUtils.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11178:40:35"
            },
            "payable": false,
            "returnParameters": {
              "id": 8118,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8117,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8144,
                  "src": "11254:4:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 8116,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "11254:4:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11253:6:35"
            },
            "scope": 9026,
            "src": "11159:489:35",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 8193,
              "nodeType": "Block",
              "src": "12011:472:35",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 8157,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 8153,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8146,
                        "src": "12021:4:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                          "typeString": "struct StringUtils.slice memory"
                        }
                      },
                      "id": 8154,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7335,
                      "src": "12021:9:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 8155,
                        "name": "needle",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8148,
                        "src": "12033:6:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                          "typeString": "struct StringUtils.slice memory"
                        }
                      },
                      "id": 8156,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7335,
                      "src": "12033:11:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "12021:23:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 8161,
                  "nodeType": "IfStatement",
                  "src": "12017:55:35",
                  "trueBody": {
                    "id": 8160,
                    "nodeType": "Block",
                    "src": "12046:26:35",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 8158,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8146,
                          "src": "12061:4:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                            "typeString": "struct StringUtils.slice memory"
                          }
                        },
                        "functionReturnParameters": 8152,
                        "id": 8159,
                        "nodeType": "Return",
                        "src": "12054:11:35"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    8163
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8163,
                      "name": "equal",
                      "nodeType": "VariableDeclaration",
                      "scope": 8194,
                      "src": "12078:10:35",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 8162,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "12078:4:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8165,
                  "initialValue": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 8164,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "12091:4:35",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "12078:17:35"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 8170,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 8166,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8146,
                        "src": "12105:4:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                          "typeString": "struct StringUtils.slice memory"
                        }
                      },
                      "id": 8167,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_ptr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7337,
                      "src": "12105:9:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 8168,
                        "name": "needle",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8148,
                        "src": "12118:6:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                          "typeString": "struct StringUtils.slice memory"
                        }
                      },
                      "id": 8169,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_ptr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7337,
                      "src": "12118:11:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "12105:24:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 8173,
                  "nodeType": "IfStatement",
                  "src": "12101:272:35",
                  "trueBody": {
                    "id": 8172,
                    "nodeType": "Block",
                    "src": "12131:242:35",
                    "statements": [
                      {
                        "externalReferences": [
                          {
                            "needle": {
                              "declaration": 8148,
                              "isOffset": false,
                              "isSlot": false,
                              "src": "12178:6:35",
                              "valueSize": 1
                            }
                          },
                          {
                            "self": {
                              "declaration": 8146,
                              "isOffset": false,
                              "isSlot": false,
                              "src": "12219:4:35",
                              "valueSize": 1
                            }
                          },
                          {
                            "equal": {
                              "declaration": 8163,
                              "isOffset": false,
                              "isSlot": false,
                              "src": "12290:5:35",
                              "valueSize": 1
                            }
                          },
                          {
                            "needle": {
                              "declaration": 8148,
                              "isOffset": false,
                              "isSlot": false,
                              "src": "12267:6:35",
                              "valueSize": 1
                            }
                          }
                        ],
                        "id": 8171,
                        "nodeType": "InlineAssembly",
                        "operations": "{\n    let length := mload(needle)\n    let selfptr := mload(add(self, 0x20))\n    let needleptr := mload(add(needle, 0x20))\n    equal := eq(keccak256(selfptr, length), keccak256(needleptr, length))\n}",
                        "src": "12139:234:35"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "id": 8174,
                    "name": "equal",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8163,
                    "src": "12383:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 8190,
                  "nodeType": "IfStatement",
                  "src": "12379:82:35",
                  "trueBody": {
                    "id": 8189,
                    "nodeType": "Block",
                    "src": "12390:71:35",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 8180,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 8175,
                              "name": "self",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8146,
                              "src": "12398:4:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                                "typeString": "struct StringUtils.slice memory"
                              }
                            },
                            "id": 8177,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "_len",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 7335,
                            "src": "12398:9:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "-=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 8178,
                              "name": "needle",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8148,
                              "src": "12411:6:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                                "typeString": "struct StringUtils.slice memory"
                              }
                            },
                            "id": 8179,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "_len",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 7335,
                            "src": "12411:11:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "12398:24:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 8181,
                        "nodeType": "ExpressionStatement",
                        "src": "12398:24:35"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 8187,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 8182,
                              "name": "self",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8146,
                              "src": "12430:4:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                                "typeString": "struct StringUtils.slice memory"
                              }
                            },
                            "id": 8184,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "_ptr",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 7337,
                            "src": "12430:9:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 8185,
                              "name": "needle",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8148,
                              "src": "12443:6:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                                "typeString": "struct StringUtils.slice memory"
                              }
                            },
                            "id": 8186,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "_len",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 7335,
                            "src": "12443:11:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "12430:24:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 8188,
                        "nodeType": "ExpressionStatement",
                        "src": "12430:24:35"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8191,
                    "name": "self",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8146,
                    "src": "12474:4:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                      "typeString": "struct StringUtils.slice memory"
                    }
                  },
                  "functionReturnParameters": 8152,
                  "id": 8192,
                  "nodeType": "Return",
                  "src": "12467:11:35"
                }
              ]
            },
            "documentation": null,
            "id": 8194,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "beyond",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8149,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8146,
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 8194,
                  "src": "11920:17:35",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                    "typeString": "struct StringUtils.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8145,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7338,
                    "src": "11920:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$7338_storage_ptr",
                      "typeString": "struct StringUtils.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8148,
                  "name": "needle",
                  "nodeType": "VariableDeclaration",
                  "scope": 8194,
                  "src": "11939:19:35",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                    "typeString": "struct StringUtils.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8147,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7338,
                    "src": "11939:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$7338_storage_ptr",
                      "typeString": "struct StringUtils.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11919:40:35"
            },
            "payable": false,
            "returnParameters": {
              "id": 8152,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8151,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8194,
                  "src": "11995:5:35",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                    "typeString": "struct StringUtils.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8150,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7338,
                    "src": "11995:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$7338_storage_ptr",
                      "typeString": "struct StringUtils.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11994:14:35"
            },
            "scope": 9026,
            "src": "11904:579:35",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 8237,
              "nodeType": "Block",
              "src": "12820:401:35",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 8207,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 8203,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8196,
                        "src": "12830:4:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                          "typeString": "struct StringUtils.slice memory"
                        }
                      },
                      "id": 8204,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7335,
                      "src": "12830:9:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 8205,
                        "name": "needle",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8198,
                        "src": "12842:6:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                          "typeString": "struct StringUtils.slice memory"
                        }
                      },
                      "id": 8206,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7335,
                      "src": "12842:11:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "12830:23:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 8211,
                  "nodeType": "IfStatement",
                  "src": "12826:56:35",
                  "trueBody": {
                    "id": 8210,
                    "nodeType": "Block",
                    "src": "12855:27:35",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "66616c7365",
                          "id": 8208,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "12870:5:35",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "false"
                        },
                        "functionReturnParameters": 8202,
                        "id": 8209,
                        "nodeType": "Return",
                        "src": "12863:12:35"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    8213
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8213,
                      "name": "selfptr",
                      "nodeType": "VariableDeclaration",
                      "scope": 8238,
                      "src": "12888:15:35",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8212,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "12888:7:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8222,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 8221,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 8218,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8214,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8196,
                          "src": "12906:4:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                            "typeString": "struct StringUtils.slice memory"
                          }
                        },
                        "id": 8215,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_ptr",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7337,
                        "src": "12906:9:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "+",
                      "rightExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8216,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8196,
                          "src": "12918:4:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                            "typeString": "struct StringUtils.slice memory"
                          }
                        },
                        "id": 8217,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7335,
                        "src": "12918:9:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "12906:21:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "-",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 8219,
                        "name": "needle",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8198,
                        "src": "12930:6:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                          "typeString": "struct StringUtils.slice memory"
                        }
                      },
                      "id": 8220,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7335,
                      "src": "12930:11:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "12906:35:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "12888:53:35"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 8226,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 8223,
                      "name": "selfptr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8213,
                      "src": "12952:7:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 8224,
                        "name": "needle",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8198,
                        "src": "12963:6:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                          "typeString": "struct StringUtils.slice memory"
                        }
                      },
                      "id": 8225,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_ptr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7337,
                      "src": "12963:11:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "12952:22:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 8230,
                  "nodeType": "IfStatement",
                  "src": "12948:54:35",
                  "trueBody": {
                    "id": 8229,
                    "nodeType": "Block",
                    "src": "12976:26:35",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "74727565",
                          "id": 8227,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "12991:4:35",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        "functionReturnParameters": 8202,
                        "id": 8228,
                        "nodeType": "Return",
                        "src": "12984:11:35"
                      }
                    ]
                  }
                },
                {
                  "assignments": [],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8232,
                      "name": "equal",
                      "nodeType": "VariableDeclaration",
                      "scope": 8238,
                      "src": "13008:10:35",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 8231,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "13008:4:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8233,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "13008:10:35"
                },
                {
                  "externalReferences": [
                    {
                      "needle": {
                        "declaration": 8198,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "13061:6:35",
                        "valueSize": 1
                      }
                    },
                    {
                      "needle": {
                        "declaration": 8198,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "13102:6:35",
                        "valueSize": 1
                      }
                    },
                    {
                      "equal": {
                        "declaration": 8232,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "13123:5:35",
                        "valueSize": 1
                      }
                    },
                    {
                      "selfptr": {
                        "declaration": 8213,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "13145:7:35",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 8234,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    let length := mload(needle)\n    let needleptr := mload(add(needle, 0x20))\n    equal := eq(keccak256(selfptr, length), keccak256(needleptr, length))\n}",
                  "src": "13024:186:35"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8235,
                    "name": "equal",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8232,
                    "src": "13211:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 8202,
                  "id": 8236,
                  "nodeType": "Return",
                  "src": "13204:12:35"
                }
              ]
            },
            "documentation": null,
            "id": 8238,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "endsWith",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8199,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8196,
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 8238,
                  "src": "12737:17:35",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                    "typeString": "struct StringUtils.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8195,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7338,
                    "src": "12737:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$7338_storage_ptr",
                      "typeString": "struct StringUtils.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8198,
                  "name": "needle",
                  "nodeType": "VariableDeclaration",
                  "scope": 8238,
                  "src": "12756:19:35",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                    "typeString": "struct StringUtils.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8197,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7338,
                    "src": "12756:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$7338_storage_ptr",
                      "typeString": "struct StringUtils.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12736:40:35"
            },
            "payable": false,
            "returnParameters": {
              "id": 8202,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8201,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8238,
                  "src": "12812:4:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 8200,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "12812:4:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12811:6:35"
            },
            "scope": 9026,
            "src": "12719:502:35",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 8290,
              "nodeType": "Block",
              "src": "13575:451:35",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 8251,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 8247,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8240,
                        "src": "13585:4:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                          "typeString": "struct StringUtils.slice memory"
                        }
                      },
                      "id": 8248,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7335,
                      "src": "13585:9:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 8249,
                        "name": "needle",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8242,
                        "src": "13597:6:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                          "typeString": "struct StringUtils.slice memory"
                        }
                      },
                      "id": 8250,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7335,
                      "src": "13597:11:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "13585:23:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 8255,
                  "nodeType": "IfStatement",
                  "src": "13581:55:35",
                  "trueBody": {
                    "id": 8254,
                    "nodeType": "Block",
                    "src": "13610:26:35",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 8252,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8240,
                          "src": "13625:4:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                            "typeString": "struct StringUtils.slice memory"
                          }
                        },
                        "functionReturnParameters": 8246,
                        "id": 8253,
                        "nodeType": "Return",
                        "src": "13618:11:35"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    8257
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8257,
                      "name": "selfptr",
                      "nodeType": "VariableDeclaration",
                      "scope": 8291,
                      "src": "13642:15:35",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8256,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "13642:7:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8266,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 8265,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 8262,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8258,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8240,
                          "src": "13660:4:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                            "typeString": "struct StringUtils.slice memory"
                          }
                        },
                        "id": 8259,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_ptr",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7337,
                        "src": "13660:9:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "+",
                      "rightExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8260,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8240,
                          "src": "13672:4:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                            "typeString": "struct StringUtils.slice memory"
                          }
                        },
                        "id": 8261,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7335,
                        "src": "13672:9:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "13660:21:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "-",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 8263,
                        "name": "needle",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8242,
                        "src": "13684:6:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                          "typeString": "struct StringUtils.slice memory"
                        }
                      },
                      "id": 8264,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7335,
                      "src": "13684:11:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "13660:35:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "13642:53:35"
                },
                {
                  "assignments": [
                    8268
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8268,
                      "name": "equal",
                      "nodeType": "VariableDeclaration",
                      "scope": 8291,
                      "src": "13701:10:35",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 8267,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "13701:4:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8270,
                  "initialValue": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 8269,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "13714:4:35",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "13701:17:35"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 8274,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 8271,
                      "name": "selfptr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8257,
                      "src": "13728:7:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 8272,
                        "name": "needle",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8242,
                        "src": "13739:6:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                          "typeString": "struct StringUtils.slice memory"
                        }
                      },
                      "id": 8273,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_ptr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7337,
                      "src": "13739:11:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "13728:22:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 8277,
                  "nodeType": "IfStatement",
                  "src": "13724:224:35",
                  "trueBody": {
                    "id": 8276,
                    "nodeType": "Block",
                    "src": "13752:196:35",
                    "statements": [
                      {
                        "externalReferences": [
                          {
                            "needle": {
                              "declaration": 8242,
                              "isOffset": false,
                              "isSlot": false,
                              "src": "13799:6:35",
                              "valueSize": 1
                            }
                          },
                          {
                            "needle": {
                              "declaration": 8242,
                              "isOffset": false,
                              "isSlot": false,
                              "src": "13842:6:35",
                              "valueSize": 1
                            }
                          },
                          {
                            "equal": {
                              "declaration": 8268,
                              "isOffset": false,
                              "isSlot": false,
                              "src": "13865:5:35",
                              "valueSize": 1
                            }
                          },
                          {
                            "selfptr": {
                              "declaration": 8257,
                              "isOffset": false,
                              "isSlot": false,
                              "src": "13887:7:35",
                              "valueSize": 1
                            }
                          }
                        ],
                        "id": 8275,
                        "nodeType": "InlineAssembly",
                        "operations": "{\n    let length := mload(needle)\n    let needleptr := mload(add(needle, 0x20))\n    equal := eq(keccak256(selfptr, length), keccak256(needleptr, length))\n}",
                        "src": "13760:188:35"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "id": 8278,
                    "name": "equal",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8268,
                    "src": "13958:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 8287,
                  "nodeType": "IfStatement",
                  "src": "13954:50:35",
                  "trueBody": {
                    "id": 8286,
                    "nodeType": "Block",
                    "src": "13965:39:35",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 8284,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 8279,
                              "name": "self",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8240,
                              "src": "13973:4:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                                "typeString": "struct StringUtils.slice memory"
                              }
                            },
                            "id": 8281,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "_len",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 7335,
                            "src": "13973:9:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "-=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 8282,
                              "name": "needle",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8242,
                              "src": "13986:6:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                                "typeString": "struct StringUtils.slice memory"
                              }
                            },
                            "id": 8283,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "_len",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 7335,
                            "src": "13986:11:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "13973:24:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 8285,
                        "nodeType": "ExpressionStatement",
                        "src": "13973:24:35"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8288,
                    "name": "self",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8240,
                    "src": "14017:4:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                      "typeString": "struct StringUtils.slice memory"
                    }
                  },
                  "functionReturnParameters": 8246,
                  "id": 8289,
                  "nodeType": "Return",
                  "src": "14010:11:35"
                }
              ]
            },
            "documentation": null,
            "id": 8291,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "until",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8243,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8240,
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 8291,
                  "src": "13484:17:35",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                    "typeString": "struct StringUtils.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8239,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7338,
                    "src": "13484:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$7338_storage_ptr",
                      "typeString": "struct StringUtils.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8242,
                  "name": "needle",
                  "nodeType": "VariableDeclaration",
                  "scope": 8291,
                  "src": "13503:19:35",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                    "typeString": "struct StringUtils.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8241,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7338,
                    "src": "13503:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$7338_storage_ptr",
                      "typeString": "struct StringUtils.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "13483:40:35"
            },
            "payable": false,
            "returnParameters": {
              "id": 8246,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8245,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8291,
                  "src": "13559:5:35",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                    "typeString": "struct StringUtils.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8244,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7338,
                    "src": "13559:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$7338_storage_ptr",
                      "typeString": "struct StringUtils.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "13558:14:35"
            },
            "scope": 9026,
            "src": "13469:557:35",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 8411,
              "nodeType": "Block",
              "src": "14317:1102:35",
              "statements": [
                {
                  "assignments": [
                    8305
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8305,
                      "name": "ptr",
                      "nodeType": "VariableDeclaration",
                      "scope": 8412,
                      "src": "14323:11:35",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8304,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "14323:7:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8307,
                  "initialValue": {
                    "argumentTypes": null,
                    "id": 8306,
                    "name": "selfptr",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8295,
                    "src": "14337:7:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "14323:21:35"
                },
                {
                  "assignments": [],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8309,
                      "name": "idx",
                      "nodeType": "VariableDeclaration",
                      "scope": 8412,
                      "src": "14350:11:35",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8308,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "14350:7:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8310,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "14350:11:35"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 8313,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 8311,
                      "name": "needlelen",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8297,
                      "src": "14372:9:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 8312,
                      "name": "selflen",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8293,
                      "src": "14385:7:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "14372:20:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 8406,
                  "nodeType": "IfStatement",
                  "src": "14368:1017:35",
                  "trueBody": {
                    "id": 8405,
                    "nodeType": "Block",
                    "src": "14394:991:35",
                    "statements": [
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 8316,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 8314,
                            "name": "needlelen",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8297,
                            "src": "14406:9:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "3332",
                            "id": 8315,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "14419:2:35",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_32_by_1",
                              "typeString": "int_const 32"
                            },
                            "value": "32"
                          },
                          "src": "14406:15:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 8403,
                          "nodeType": "Block",
                          "src": "14983:396:35",
                          "statements": [
                            {
                              "assignments": [],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 8372,
                                  "name": "hash",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 8412,
                                  "src": "15034:12:35",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  "typeName": {
                                    "id": 8371,
                                    "name": "bytes32",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "15034:7:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                }
                              ],
                              "id": 8373,
                              "initialValue": null,
                              "nodeType": "VariableDeclarationStatement",
                              "src": "15034:12:35"
                            },
                            {
                              "externalReferences": [
                                {
                                  "hash": {
                                    "declaration": 8372,
                                    "isOffset": false,
                                    "isSlot": false,
                                    "src": "15077:4:35",
                                    "valueSize": 1
                                  }
                                },
                                {
                                  "needleptr": {
                                    "declaration": 8299,
                                    "isOffset": false,
                                    "isSlot": false,
                                    "src": "15095:9:35",
                                    "valueSize": 1
                                  }
                                },
                                {
                                  "needlelen": {
                                    "declaration": 8297,
                                    "isOffset": false,
                                    "isSlot": false,
                                    "src": "15106:9:35",
                                    "valueSize": 1
                                  }
                                }
                              ],
                              "id": 8374,
                              "nodeType": "InlineAssembly",
                              "operations": "{\n    hash := keccak256(needleptr, needlelen)\n}",
                              "src": "15056:83:35"
                            },
                            {
                              "body": {
                                "id": 8401,
                                "nodeType": "Block",
                                "src": "15185:186:35",
                                "statements": [
                                  {
                                    "assignments": [],
                                    "declarations": [
                                      {
                                        "constant": false,
                                        "id": 8388,
                                        "name": "testHash",
                                        "nodeType": "VariableDeclaration",
                                        "scope": 8412,
                                        "src": "15197:16:35",
                                        "stateVariable": false,
                                        "storageLocation": "default",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        },
                                        "typeName": {
                                          "id": 8387,
                                          "name": "bytes32",
                                          "nodeType": "ElementaryTypeName",
                                          "src": "15197:7:35",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                          }
                                        },
                                        "value": null,
                                        "visibility": "internal"
                                      }
                                    ],
                                    "id": 8389,
                                    "initialValue": null,
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "15197:16:35"
                                  },
                                  {
                                    "externalReferences": [
                                      {
                                        "testHash": {
                                          "declaration": 8388,
                                          "isOffset": false,
                                          "isSlot": false,
                                          "src": "15248:8:35",
                                          "valueSize": 1
                                        }
                                      },
                                      {
                                        "ptr": {
                                          "declaration": 8305,
                                          "isOffset": false,
                                          "isSlot": false,
                                          "src": "15270:3:35",
                                          "valueSize": 1
                                        }
                                      },
                                      {
                                        "needlelen": {
                                          "declaration": 8297,
                                          "isOffset": false,
                                          "isSlot": false,
                                          "src": "15275:9:35",
                                          "valueSize": 1
                                        }
                                      }
                                    ],
                                    "id": 8390,
                                    "nodeType": "InlineAssembly",
                                    "operations": "{\n    testHash := keccak256(ptr, needlelen)\n}",
                                    "src": "15225:85:35"
                                  },
                                  {
                                    "condition": {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      },
                                      "id": 8393,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "argumentTypes": null,
                                        "id": 8391,
                                        "name": "hash",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 8372,
                                        "src": "15312:4:35",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "==",
                                      "rightExpression": {
                                        "argumentTypes": null,
                                        "id": 8392,
                                        "name": "testHash",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 8388,
                                        "src": "15320:8:35",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        }
                                      },
                                      "src": "15312:16:35",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "falseBody": null,
                                    "id": 8396,
                                    "nodeType": "IfStatement",
                                    "src": "15308:32:35",
                                    "trueBody": {
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 8394,
                                        "name": "ptr",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 8305,
                                        "src": "15337:3:35",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "functionReturnParameters": 8303,
                                      "id": 8395,
                                      "nodeType": "Return",
                                      "src": "15330:10:35"
                                    }
                                  },
                                  {
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 8399,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "argumentTypes": null,
                                        "id": 8397,
                                        "name": "ptr",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 8305,
                                        "src": "15352:3:35",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "+=",
                                      "rightHandSide": {
                                        "argumentTypes": null,
                                        "hexValue": "31",
                                        "id": 8398,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "15359:1:35",
                                        "subdenomination": null,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_1_by_1",
                                          "typeString": "int_const 1"
                                        },
                                        "value": "1"
                                      },
                                      "src": "15352:8:35",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 8400,
                                    "nodeType": "ExpressionStatement",
                                    "src": "15352:8:35"
                                  }
                                ]
                              },
                              "condition": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 8383,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "id": 8379,
                                  "name": "idx",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8309,
                                  "src": "15150:3:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "<=",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 8382,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "id": 8380,
                                    "name": "selflen",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8293,
                                    "src": "15157:7:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "-",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "id": 8381,
                                    "name": "needlelen",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8297,
                                    "src": "15167:9:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "15157:19:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "15150:26:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 8402,
                              "initializationExpression": {
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 8377,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftHandSide": {
                                    "argumentTypes": null,
                                    "id": 8375,
                                    "name": "idx",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8309,
                                    "src": "15141:3:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "Assignment",
                                  "operator": "=",
                                  "rightHandSide": {
                                    "argumentTypes": null,
                                    "hexValue": "30",
                                    "id": 8376,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "15147:1:35",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  },
                                  "src": "15141:7:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 8378,
                                "nodeType": "ExpressionStatement",
                                "src": "15141:7:35"
                              },
                              "loopExpression": {
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 8385,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "UnaryOperation",
                                  "operator": "++",
                                  "prefix": false,
                                  "src": "15178:5:35",
                                  "subExpression": {
                                    "argumentTypes": null,
                                    "id": 8384,
                                    "name": "idx",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8309,
                                    "src": "15178:3:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 8386,
                                "nodeType": "ExpressionStatement",
                                "src": "15178:5:35"
                              },
                              "nodeType": "ForStatement",
                              "src": "15136:235:35"
                            }
                          ]
                        },
                        "id": 8404,
                        "nodeType": "IfStatement",
                        "src": "14402:977:35",
                        "trueBody": {
                          "id": 8370,
                          "nodeType": "Block",
                          "src": "14423:554:35",
                          "statements": [
                            {
                              "assignments": [
                                8318
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 8318,
                                  "name": "mask",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 8412,
                                  "src": "14433:12:35",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  "typeName": {
                                    "id": 8317,
                                    "name": "bytes32",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "14433:7:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                }
                              ],
                              "id": 8334,
                              "initialValue": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 8332,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "UnaryOperation",
                                    "operator": "~",
                                    "prefix": true,
                                    "src": "14456:32:35",
                                    "subExpression": {
                                      "argumentTypes": null,
                                      "components": [
                                        {
                                          "argumentTypes": null,
                                          "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          "id": 8330,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "leftExpression": {
                                            "argumentTypes": null,
                                            "commonType": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            },
                                            "id": 8328,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "leftExpression": {
                                              "argumentTypes": null,
                                              "hexValue": "32",
                                              "id": 8320,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "kind": "number",
                                              "lValueRequested": false,
                                              "nodeType": "Literal",
                                              "src": "14458:1:35",
                                              "subdenomination": null,
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_rational_2_by_1",
                                                "typeString": "int_const 2"
                                              },
                                              "value": "2"
                                            },
                                            "nodeType": "BinaryOperation",
                                            "operator": "**",
                                            "rightExpression": {
                                              "argumentTypes": null,
                                              "components": [
                                                {
                                                  "argumentTypes": null,
                                                  "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                  },
                                                  "id": 8326,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "lValueRequested": false,
                                                  "leftExpression": {
                                                    "argumentTypes": null,
                                                    "hexValue": "38",
                                                    "id": 8321,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "kind": "number",
                                                    "lValueRequested": false,
                                                    "nodeType": "Literal",
                                                    "src": "14462:1:35",
                                                    "subdenomination": null,
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_rational_8_by_1",
                                                      "typeString": "int_const 8"
                                                    },
                                                    "value": "8"
                                                  },
                                                  "nodeType": "BinaryOperation",
                                                  "operator": "*",
                                                  "rightExpression": {
                                                    "argumentTypes": null,
                                                    "components": [
                                                      {
                                                        "argumentTypes": null,
                                                        "commonType": {
                                                          "typeIdentifier": "t_uint256",
                                                          "typeString": "uint256"
                                                        },
                                                        "id": 8324,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "leftExpression": {
                                                          "argumentTypes": null,
                                                          "hexValue": "3332",
                                                          "id": 8322,
                                                          "isConstant": false,
                                                          "isLValue": false,
                                                          "isPure": true,
                                                          "kind": "number",
                                                          "lValueRequested": false,
                                                          "nodeType": "Literal",
                                                          "src": "14467:2:35",
                                                          "subdenomination": null,
                                                          "typeDescriptions": {
                                                            "typeIdentifier": "t_rational_32_by_1",
                                                            "typeString": "int_const 32"
                                                          },
                                                          "value": "32"
                                                        },
                                                        "nodeType": "BinaryOperation",
                                                        "operator": "-",
                                                        "rightExpression": {
                                                          "argumentTypes": null,
                                                          "id": 8323,
                                                          "name": "needlelen",
                                                          "nodeType": "Identifier",
                                                          "overloadedDeclarations": [],
                                                          "referencedDeclaration": 8297,
                                                          "src": "14472:9:35",
                                                          "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                          }
                                                        },
                                                        "src": "14467:14:35",
                                                        "typeDescriptions": {
                                                          "typeIdentifier": "t_uint256",
                                                          "typeString": "uint256"
                                                        }
                                                      }
                                                    ],
                                                    "id": 8325,
                                                    "isConstant": false,
                                                    "isInlineArray": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "nodeType": "TupleExpression",
                                                    "src": "14466:16:35",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_uint256",
                                                      "typeString": "uint256"
                                                    }
                                                  },
                                                  "src": "14462:20:35",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                  }
                                                }
                                              ],
                                              "id": 8327,
                                              "isConstant": false,
                                              "isInlineArray": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "nodeType": "TupleExpression",
                                              "src": "14461:22:35",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            },
                                            "src": "14458:25:35",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "nodeType": "BinaryOperation",
                                          "operator": "-",
                                          "rightExpression": {
                                            "argumentTypes": null,
                                            "hexValue": "31",
                                            "id": 8329,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "number",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "14486:1:35",
                                            "subdenomination": null,
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_rational_1_by_1",
                                              "typeString": "int_const 1"
                                            },
                                            "value": "1"
                                          },
                                          "src": "14458:29:35",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        }
                                      ],
                                      "id": 8331,
                                      "isConstant": false,
                                      "isInlineArray": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "TupleExpression",
                                      "src": "14457:31:35",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 8319,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "14448:7:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_bytes32_$",
                                    "typeString": "type(bytes32)"
                                  },
                                  "typeName": "bytes32"
                                },
                                "id": 8333,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "14448:41:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "14433:56:35"
                            },
                            {
                              "assignments": [],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 8336,
                                  "name": "needledata",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 8412,
                                  "src": "14500:18:35",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  "typeName": {
                                    "id": 8335,
                                    "name": "bytes32",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "14500:7:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                }
                              ],
                              "id": 8337,
                              "initialValue": null,
                              "nodeType": "VariableDeclarationStatement",
                              "src": "14500:18:35"
                            },
                            {
                              "externalReferences": [
                                {
                                  "needleptr": {
                                    "declaration": 8299,
                                    "isOffset": false,
                                    "isSlot": false,
                                    "src": "14573:9:35",
                                    "valueSize": 1
                                  }
                                },
                                {
                                  "needledata": {
                                    "declaration": 8336,
                                    "isOffset": false,
                                    "isSlot": false,
                                    "src": "14549:10:35",
                                    "valueSize": 1
                                  }
                                },
                                {
                                  "mask": {
                                    "declaration": 8318,
                                    "isOffset": false,
                                    "isSlot": false,
                                    "src": "14585:4:35",
                                    "valueSize": 1
                                  }
                                }
                              ],
                              "id": 8338,
                              "nodeType": "InlineAssembly",
                              "operations": "{\n    needledata := and(mload(needleptr), mask)\n}",
                              "src": "14528:89:35"
                            },
                            {
                              "assignments": [
                                8340
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 8340,
                                  "name": "end",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 8412,
                                  "src": "14610:11:35",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "typeName": {
                                    "id": 8339,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "14610:7:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                }
                              ],
                              "id": 8346,
                              "initialValue": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 8345,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 8343,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "id": 8341,
                                    "name": "selfptr",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8295,
                                    "src": "14624:7:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "+",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "id": 8342,
                                    "name": "selflen",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8293,
                                    "src": "14634:7:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "14624:17:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "-",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "id": 8344,
                                  "name": "needlelen",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8297,
                                  "src": "14644:9:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "14624:29:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "14610:43:35"
                            },
                            {
                              "assignments": [],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 8348,
                                  "name": "ptrdata",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 8412,
                                  "src": "14663:15:35",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  "typeName": {
                                    "id": 8347,
                                    "name": "bytes32",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "14663:7:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                }
                              ],
                              "id": 8349,
                              "initialValue": null,
                              "nodeType": "VariableDeclarationStatement",
                              "src": "14663:15:35"
                            },
                            {
                              "externalReferences": [
                                {
                                  "ptr": {
                                    "declaration": 8305,
                                    "isOffset": false,
                                    "isSlot": false,
                                    "src": "14730:3:35",
                                    "valueSize": 1
                                  }
                                },
                                {
                                  "ptrdata": {
                                    "declaration": 8348,
                                    "isOffset": false,
                                    "isSlot": false,
                                    "src": "14709:7:35",
                                    "valueSize": 1
                                  }
                                },
                                {
                                  "mask": {
                                    "declaration": 8318,
                                    "isOffset": false,
                                    "isSlot": false,
                                    "src": "14736:4:35",
                                    "valueSize": 1
                                  }
                                }
                              ],
                              "id": 8350,
                              "nodeType": "InlineAssembly",
                              "operations": "{\n    ptrdata := and(mload(ptr), mask)\n}",
                              "src": "14688:78:35"
                            },
                            {
                              "body": {
                                "id": 8366,
                                "nodeType": "Block",
                                "src": "14791:158:35",
                                "statements": [
                                  {
                                    "condition": {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 8356,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "argumentTypes": null,
                                        "id": 8354,
                                        "name": "ptr",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 8305,
                                        "src": "14807:3:35",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": ">=",
                                      "rightExpression": {
                                        "argumentTypes": null,
                                        "id": 8355,
                                        "name": "end",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 8340,
                                        "src": "14814:3:35",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "14807:10:35",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "falseBody": null,
                                    "id": 8361,
                                    "nodeType": "IfStatement",
                                    "src": "14803:40:35",
                                    "trueBody": {
                                      "expression": {
                                        "argumentTypes": null,
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 8359,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "argumentTypes": null,
                                          "id": 8357,
                                          "name": "selfptr",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 8295,
                                          "src": "14826:7:35",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "+",
                                        "rightExpression": {
                                          "argumentTypes": null,
                                          "id": 8358,
                                          "name": "selflen",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 8293,
                                          "src": "14836:7:35",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "src": "14826:17:35",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "functionReturnParameters": 8303,
                                      "id": 8360,
                                      "nodeType": "Return",
                                      "src": "14819:24:35"
                                    }
                                  },
                                  {
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 8363,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "UnaryOperation",
                                      "operator": "++",
                                      "prefix": false,
                                      "src": "14855:5:35",
                                      "subExpression": {
                                        "argumentTypes": null,
                                        "id": 8362,
                                        "name": "ptr",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 8305,
                                        "src": "14855:3:35",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 8364,
                                    "nodeType": "ExpressionStatement",
                                    "src": "14855:5:35"
                                  },
                                  {
                                    "externalReferences": [
                                      {
                                        "ptr": {
                                          "declaration": 8305,
                                          "isOffset": false,
                                          "isSlot": false,
                                          "src": "14916:3:35",
                                          "valueSize": 1
                                        }
                                      },
                                      {
                                        "ptrdata": {
                                          "declaration": 8348,
                                          "isOffset": false,
                                          "isSlot": false,
                                          "src": "14895:7:35",
                                          "valueSize": 1
                                        }
                                      },
                                      {
                                        "mask": {
                                          "declaration": 8318,
                                          "isOffset": false,
                                          "isSlot": false,
                                          "src": "14922:4:35",
                                          "valueSize": 1
                                        }
                                      }
                                    ],
                                    "id": 8365,
                                    "nodeType": "InlineAssembly",
                                    "operations": "{\n    ptrdata := and(mload(ptr), mask)\n}",
                                    "src": "14872:77:35"
                                  }
                                ]
                              },
                              "condition": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                "id": 8353,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "id": 8351,
                                  "name": "ptrdata",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8348,
                                  "src": "14768:7:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "!=",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "id": 8352,
                                  "name": "needledata",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8336,
                                  "src": "14779:10:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "src": "14768:21:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 8367,
                              "nodeType": "WhileStatement",
                              "src": "14761:188:35"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 8368,
                                "name": "ptr",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8305,
                                "src": "14965:3:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "functionReturnParameters": 8303,
                              "id": 8369,
                              "nodeType": "Return",
                              "src": "14958:10:35"
                            }
                          ]
                        }
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 8409,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 8407,
                      "name": "selfptr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8295,
                      "src": "15397:7:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "+",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 8408,
                      "name": "selflen",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8293,
                      "src": "15407:7:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "15397:17:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 8303,
                  "id": 8410,
                  "nodeType": "Return",
                  "src": "15390:24:35"
                }
              ]
            },
            "documentation": null,
            "id": 8412,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "findPtr",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8300,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8293,
                  "name": "selflen",
                  "nodeType": "VariableDeclaration",
                  "scope": 8412,
                  "src": "14199:15:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8292,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "14199:7:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8295,
                  "name": "selfptr",
                  "nodeType": "VariableDeclaration",
                  "scope": 8412,
                  "src": "14220:15:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8294,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "14220:7:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8297,
                  "name": "needlelen",
                  "nodeType": "VariableDeclaration",
                  "scope": 8412,
                  "src": "14241:17:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8296,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "14241:7:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8299,
                  "name": "needleptr",
                  "nodeType": "VariableDeclaration",
                  "scope": 8412,
                  "src": "14264:17:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8298,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "14264:7:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "14193:92:35"
            },
            "payable": false,
            "returnParameters": {
              "id": 8303,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8302,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8412,
                  "src": "14308:7:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8301,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "14308:7:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "14307:9:35"
            },
            "scope": 9026,
            "src": "14177:1242:35",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "private"
          },
          {
            "body": {
              "id": 8528,
              "nodeType": "Block",
              "src": "15707:1095:35",
              "statements": [
                {
                  "assignments": [],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8426,
                      "name": "ptr",
                      "nodeType": "VariableDeclaration",
                      "scope": 8529,
                      "src": "15713:11:35",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8425,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "15713:7:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8427,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "15713:11:35"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 8430,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 8428,
                      "name": "needlelen",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8418,
                      "src": "15735:9:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 8429,
                      "name": "selflen",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8414,
                      "src": "15748:7:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "15735:20:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 8525,
                  "nodeType": "IfStatement",
                  "src": "15731:1047:35",
                  "trueBody": {
                    "id": 8524,
                    "nodeType": "Block",
                    "src": "15757:1021:35",
                    "statements": [
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 8433,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 8431,
                            "name": "needlelen",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8418,
                            "src": "15769:9:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "3332",
                            "id": 8432,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "15782:2:35",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_32_by_1",
                              "typeString": "int_const 32"
                            },
                            "value": "32"
                          },
                          "src": "15769:15:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 8522,
                          "nodeType": "Block",
                          "src": "16344:428:35",
                          "statements": [
                            {
                              "assignments": [],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 8489,
                                  "name": "hash",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 8529,
                                  "src": "16395:12:35",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  "typeName": {
                                    "id": 8488,
                                    "name": "bytes32",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "16395:7:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                }
                              ],
                              "id": 8490,
                              "initialValue": null,
                              "nodeType": "VariableDeclarationStatement",
                              "src": "16395:12:35"
                            },
                            {
                              "externalReferences": [
                                {
                                  "hash": {
                                    "declaration": 8489,
                                    "isOffset": false,
                                    "isSlot": false,
                                    "src": "16438:4:35",
                                    "valueSize": 1
                                  }
                                },
                                {
                                  "needleptr": {
                                    "declaration": 8420,
                                    "isOffset": false,
                                    "isSlot": false,
                                    "src": "16456:9:35",
                                    "valueSize": 1
                                  }
                                },
                                {
                                  "needlelen": {
                                    "declaration": 8418,
                                    "isOffset": false,
                                    "isSlot": false,
                                    "src": "16467:9:35",
                                    "valueSize": 1
                                  }
                                }
                              ],
                              "id": 8491,
                              "nodeType": "InlineAssembly",
                              "operations": "{\n    hash := keccak256(needleptr, needlelen)\n}",
                              "src": "16417:82:35"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 8499,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 8492,
                                  "name": "ptr",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8426,
                                  "src": "16496:3:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 8498,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "id": 8493,
                                    "name": "selfptr",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8416,
                                    "src": "16502:7:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "+",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "components": [
                                      {
                                        "argumentTypes": null,
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 8496,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "argumentTypes": null,
                                          "id": 8494,
                                          "name": "selflen",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 8414,
                                          "src": "16513:7:35",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "-",
                                        "rightExpression": {
                                          "argumentTypes": null,
                                          "id": 8495,
                                          "name": "needlelen",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 8418,
                                          "src": "16523:9:35",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "src": "16513:19:35",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "id": 8497,
                                    "isConstant": false,
                                    "isInlineArray": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "TupleExpression",
                                    "src": "16512:21:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "16502:31:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "16496:37:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 8500,
                              "nodeType": "ExpressionStatement",
                              "src": "16496:37:35"
                            },
                            {
                              "body": {
                                "id": 8520,
                                "nodeType": "Block",
                                "src": "16566:198:35",
                                "statements": [
                                  {
                                    "assignments": [],
                                    "declarations": [
                                      {
                                        "constant": false,
                                        "id": 8505,
                                        "name": "testHash",
                                        "nodeType": "VariableDeclaration",
                                        "scope": 8529,
                                        "src": "16578:16:35",
                                        "stateVariable": false,
                                        "storageLocation": "default",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        },
                                        "typeName": {
                                          "id": 8504,
                                          "name": "bytes32",
                                          "nodeType": "ElementaryTypeName",
                                          "src": "16578:7:35",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                          }
                                        },
                                        "value": null,
                                        "visibility": "internal"
                                      }
                                    ],
                                    "id": 8506,
                                    "initialValue": null,
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "16578:16:35"
                                  },
                                  {
                                    "externalReferences": [
                                      {
                                        "testHash": {
                                          "declaration": 8505,
                                          "isOffset": false,
                                          "isSlot": false,
                                          "src": "16629:8:35",
                                          "valueSize": 1
                                        }
                                      },
                                      {
                                        "ptr": {
                                          "declaration": 8426,
                                          "isOffset": false,
                                          "isSlot": false,
                                          "src": "16651:3:35",
                                          "valueSize": 1
                                        }
                                      },
                                      {
                                        "needlelen": {
                                          "declaration": 8418,
                                          "isOffset": false,
                                          "isSlot": false,
                                          "src": "16656:9:35",
                                          "valueSize": 1
                                        }
                                      }
                                    ],
                                    "id": 8507,
                                    "nodeType": "InlineAssembly",
                                    "operations": "{\n    testHash := keccak256(ptr, needlelen)\n}",
                                    "src": "16606:85:35"
                                  },
                                  {
                                    "condition": {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      },
                                      "id": 8510,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "argumentTypes": null,
                                        "id": 8508,
                                        "name": "hash",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 8489,
                                        "src": "16693:4:35",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "==",
                                      "rightExpression": {
                                        "argumentTypes": null,
                                        "id": 8509,
                                        "name": "testHash",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 8505,
                                        "src": "16701:8:35",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        }
                                      },
                                      "src": "16693:16:35",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "falseBody": null,
                                    "id": 8515,
                                    "nodeType": "IfStatement",
                                    "src": "16689:44:35",
                                    "trueBody": {
                                      "expression": {
                                        "argumentTypes": null,
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 8513,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "argumentTypes": null,
                                          "id": 8511,
                                          "name": "ptr",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 8426,
                                          "src": "16718:3:35",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "+",
                                        "rightExpression": {
                                          "argumentTypes": null,
                                          "id": 8512,
                                          "name": "needlelen",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 8418,
                                          "src": "16724:9:35",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "src": "16718:15:35",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "functionReturnParameters": 8424,
                                      "id": 8514,
                                      "nodeType": "Return",
                                      "src": "16711:22:35"
                                    }
                                  },
                                  {
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 8518,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "argumentTypes": null,
                                        "id": 8516,
                                        "name": "ptr",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 8426,
                                        "src": "16745:3:35",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "-=",
                                      "rightHandSide": {
                                        "argumentTypes": null,
                                        "hexValue": "31",
                                        "id": 8517,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "16752:1:35",
                                        "subdenomination": null,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_1_by_1",
                                          "typeString": "int_const 1"
                                        },
                                        "value": "1"
                                      },
                                      "src": "16745:8:35",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 8519,
                                    "nodeType": "ExpressionStatement",
                                    "src": "16745:8:35"
                                  }
                                ]
                              },
                              "condition": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 8503,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "id": 8501,
                                  "name": "ptr",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8426,
                                  "src": "16550:3:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">=",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "id": 8502,
                                  "name": "selfptr",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8416,
                                  "src": "16557:7:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "16550:14:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 8521,
                              "nodeType": "WhileStatement",
                              "src": "16543:221:35"
                            }
                          ]
                        },
                        "id": 8523,
                        "nodeType": "IfStatement",
                        "src": "15765:1007:35",
                        "trueBody": {
                          "id": 8487,
                          "nodeType": "Block",
                          "src": "15786:552:35",
                          "statements": [
                            {
                              "assignments": [
                                8435
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 8435,
                                  "name": "mask",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 8529,
                                  "src": "15796:12:35",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  "typeName": {
                                    "id": 8434,
                                    "name": "bytes32",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "15796:7:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                }
                              ],
                              "id": 8451,
                              "initialValue": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 8449,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "UnaryOperation",
                                    "operator": "~",
                                    "prefix": true,
                                    "src": "15819:32:35",
                                    "subExpression": {
                                      "argumentTypes": null,
                                      "components": [
                                        {
                                          "argumentTypes": null,
                                          "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          "id": 8447,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "leftExpression": {
                                            "argumentTypes": null,
                                            "commonType": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            },
                                            "id": 8445,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "leftExpression": {
                                              "argumentTypes": null,
                                              "hexValue": "32",
                                              "id": 8437,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "kind": "number",
                                              "lValueRequested": false,
                                              "nodeType": "Literal",
                                              "src": "15821:1:35",
                                              "subdenomination": null,
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_rational_2_by_1",
                                                "typeString": "int_const 2"
                                              },
                                              "value": "2"
                                            },
                                            "nodeType": "BinaryOperation",
                                            "operator": "**",
                                            "rightExpression": {
                                              "argumentTypes": null,
                                              "components": [
                                                {
                                                  "argumentTypes": null,
                                                  "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                  },
                                                  "id": 8443,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "lValueRequested": false,
                                                  "leftExpression": {
                                                    "argumentTypes": null,
                                                    "hexValue": "38",
                                                    "id": 8438,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "kind": "number",
                                                    "lValueRequested": false,
                                                    "nodeType": "Literal",
                                                    "src": "15825:1:35",
                                                    "subdenomination": null,
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_rational_8_by_1",
                                                      "typeString": "int_const 8"
                                                    },
                                                    "value": "8"
                                                  },
                                                  "nodeType": "BinaryOperation",
                                                  "operator": "*",
                                                  "rightExpression": {
                                                    "argumentTypes": null,
                                                    "components": [
                                                      {
                                                        "argumentTypes": null,
                                                        "commonType": {
                                                          "typeIdentifier": "t_uint256",
                                                          "typeString": "uint256"
                                                        },
                                                        "id": 8441,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "leftExpression": {
                                                          "argumentTypes": null,
                                                          "hexValue": "3332",
                                                          "id": 8439,
                                                          "isConstant": false,
                                                          "isLValue": false,
                                                          "isPure": true,
                                                          "kind": "number",
                                                          "lValueRequested": false,
                                                          "nodeType": "Literal",
                                                          "src": "15830:2:35",
                                                          "subdenomination": null,
                                                          "typeDescriptions": {
                                                            "typeIdentifier": "t_rational_32_by_1",
                                                            "typeString": "int_const 32"
                                                          },
                                                          "value": "32"
                                                        },
                                                        "nodeType": "BinaryOperation",
                                                        "operator": "-",
                                                        "rightExpression": {
                                                          "argumentTypes": null,
                                                          "id": 8440,
                                                          "name": "needlelen",
                                                          "nodeType": "Identifier",
                                                          "overloadedDeclarations": [],
                                                          "referencedDeclaration": 8418,
                                                          "src": "15835:9:35",
                                                          "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                          }
                                                        },
                                                        "src": "15830:14:35",
                                                        "typeDescriptions": {
                                                          "typeIdentifier": "t_uint256",
                                                          "typeString": "uint256"
                                                        }
                                                      }
                                                    ],
                                                    "id": 8442,
                                                    "isConstant": false,
                                                    "isInlineArray": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "nodeType": "TupleExpression",
                                                    "src": "15829:16:35",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_uint256",
                                                      "typeString": "uint256"
                                                    }
                                                  },
                                                  "src": "15825:20:35",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                  }
                                                }
                                              ],
                                              "id": 8444,
                                              "isConstant": false,
                                              "isInlineArray": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "nodeType": "TupleExpression",
                                              "src": "15824:22:35",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            },
                                            "src": "15821:25:35",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "nodeType": "BinaryOperation",
                                          "operator": "-",
                                          "rightExpression": {
                                            "argumentTypes": null,
                                            "hexValue": "31",
                                            "id": 8446,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "number",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "15849:1:35",
                                            "subdenomination": null,
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_rational_1_by_1",
                                              "typeString": "int_const 1"
                                            },
                                            "value": "1"
                                          },
                                          "src": "15821:29:35",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        }
                                      ],
                                      "id": 8448,
                                      "isConstant": false,
                                      "isInlineArray": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "TupleExpression",
                                      "src": "15820:31:35",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 8436,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "15811:7:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_bytes32_$",
                                    "typeString": "type(bytes32)"
                                  },
                                  "typeName": "bytes32"
                                },
                                "id": 8450,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "15811:41:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "15796:56:35"
                            },
                            {
                              "assignments": [],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 8453,
                                  "name": "needledata",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 8529,
                                  "src": "15863:18:35",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  "typeName": {
                                    "id": 8452,
                                    "name": "bytes32",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "15863:7:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                }
                              ],
                              "id": 8454,
                              "initialValue": null,
                              "nodeType": "VariableDeclarationStatement",
                              "src": "15863:18:35"
                            },
                            {
                              "externalReferences": [
                                {
                                  "needleptr": {
                                    "declaration": 8420,
                                    "isOffset": false,
                                    "isSlot": false,
                                    "src": "15936:9:35",
                                    "valueSize": 1
                                  }
                                },
                                {
                                  "needledata": {
                                    "declaration": 8453,
                                    "isOffset": false,
                                    "isSlot": false,
                                    "src": "15912:10:35",
                                    "valueSize": 1
                                  }
                                },
                                {
                                  "mask": {
                                    "declaration": 8435,
                                    "isOffset": false,
                                    "isSlot": false,
                                    "src": "15948:4:35",
                                    "valueSize": 1
                                  }
                                }
                              ],
                              "id": 8455,
                              "nodeType": "InlineAssembly",
                              "operations": "{\n    needledata := and(mload(needleptr), mask)\n}",
                              "src": "15891:85:35"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 8462,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 8456,
                                  "name": "ptr",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8426,
                                  "src": "15973:3:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 8461,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 8459,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "argumentTypes": null,
                                      "id": 8457,
                                      "name": "selfptr",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 8416,
                                      "src": "15979:7:35",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "+",
                                    "rightExpression": {
                                      "argumentTypes": null,
                                      "id": 8458,
                                      "name": "selflen",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 8414,
                                      "src": "15989:7:35",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "15979:17:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "-",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "id": 8460,
                                    "name": "needlelen",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8418,
                                    "src": "15999:9:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "15979:29:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "15973:35:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 8463,
                              "nodeType": "ExpressionStatement",
                              "src": "15973:35:35"
                            },
                            {
                              "assignments": [],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 8465,
                                  "name": "ptrdata",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 8529,
                                  "src": "16018:15:35",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  "typeName": {
                                    "id": 8464,
                                    "name": "bytes32",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "16018:7:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                }
                              ],
                              "id": 8466,
                              "initialValue": null,
                              "nodeType": "VariableDeclarationStatement",
                              "src": "16018:15:35"
                            },
                            {
                              "externalReferences": [
                                {
                                  "ptr": {
                                    "declaration": 8426,
                                    "isOffset": false,
                                    "isSlot": false,
                                    "src": "16085:3:35",
                                    "valueSize": 1
                                  }
                                },
                                {
                                  "ptrdata": {
                                    "declaration": 8465,
                                    "isOffset": false,
                                    "isSlot": false,
                                    "src": "16064:7:35",
                                    "valueSize": 1
                                  }
                                },
                                {
                                  "mask": {
                                    "declaration": 8435,
                                    "isOffset": false,
                                    "isSlot": false,
                                    "src": "16091:4:35",
                                    "valueSize": 1
                                  }
                                }
                              ],
                              "id": 8467,
                              "nodeType": "InlineAssembly",
                              "operations": "{\n    ptrdata := and(mload(ptr), mask)\n}",
                              "src": "16043:78:35"
                            },
                            {
                              "body": {
                                "id": 8481,
                                "nodeType": "Block",
                                "src": "16146:152:35",
                                "statements": [
                                  {
                                    "condition": {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 8473,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "argumentTypes": null,
                                        "id": 8471,
                                        "name": "ptr",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 8426,
                                        "src": "16162:3:35",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "<=",
                                      "rightExpression": {
                                        "argumentTypes": null,
                                        "id": 8472,
                                        "name": "selfptr",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 8416,
                                        "src": "16169:7:35",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "16162:14:35",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "falseBody": null,
                                    "id": 8476,
                                    "nodeType": "IfStatement",
                                    "src": "16158:34:35",
                                    "trueBody": {
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 8474,
                                        "name": "selfptr",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 8416,
                                        "src": "16185:7:35",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "functionReturnParameters": 8424,
                                      "id": 8475,
                                      "nodeType": "Return",
                                      "src": "16178:14:35"
                                    }
                                  },
                                  {
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 8478,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "UnaryOperation",
                                      "operator": "--",
                                      "prefix": false,
                                      "src": "16204:5:35",
                                      "subExpression": {
                                        "argumentTypes": null,
                                        "id": 8477,
                                        "name": "ptr",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 8426,
                                        "src": "16204:3:35",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 8479,
                                    "nodeType": "ExpressionStatement",
                                    "src": "16204:5:35"
                                  },
                                  {
                                    "externalReferences": [
                                      {
                                        "ptr": {
                                          "declaration": 8426,
                                          "isOffset": false,
                                          "isSlot": false,
                                          "src": "16265:3:35",
                                          "valueSize": 1
                                        }
                                      },
                                      {
                                        "ptrdata": {
                                          "declaration": 8465,
                                          "isOffset": false,
                                          "isSlot": false,
                                          "src": "16244:7:35",
                                          "valueSize": 1
                                        }
                                      },
                                      {
                                        "mask": {
                                          "declaration": 8435,
                                          "isOffset": false,
                                          "isSlot": false,
                                          "src": "16271:4:35",
                                          "valueSize": 1
                                        }
                                      }
                                    ],
                                    "id": 8480,
                                    "nodeType": "InlineAssembly",
                                    "operations": "{\n    ptrdata := and(mload(ptr), mask)\n}",
                                    "src": "16221:77:35"
                                  }
                                ]
                              },
                              "condition": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                "id": 8470,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "id": 8468,
                                  "name": "ptrdata",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8465,
                                  "src": "16123:7:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "!=",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "id": 8469,
                                  "name": "needledata",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8453,
                                  "src": "16134:10:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "src": "16123:21:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 8482,
                              "nodeType": "WhileStatement",
                              "src": "16116:182:35"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 8485,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "id": 8483,
                                  "name": "ptr",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8426,
                                  "src": "16314:3:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "+",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "id": 8484,
                                  "name": "needlelen",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8418,
                                  "src": "16320:9:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "16314:15:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "functionReturnParameters": 8424,
                              "id": 8486,
                              "nodeType": "Return",
                              "src": "16307:22:35"
                            }
                          ]
                        }
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8526,
                    "name": "selfptr",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8416,
                    "src": "16790:7:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 8424,
                  "id": 8527,
                  "nodeType": "Return",
                  "src": "16783:14:35"
                }
              ]
            },
            "documentation": null,
            "id": 8529,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "rfindPtr",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8421,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8414,
                  "name": "selflen",
                  "nodeType": "VariableDeclaration",
                  "scope": 8529,
                  "src": "15589:15:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8413,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "15589:7:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8416,
                  "name": "selfptr",
                  "nodeType": "VariableDeclaration",
                  "scope": 8529,
                  "src": "15610:15:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8415,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "15610:7:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8418,
                  "name": "needlelen",
                  "nodeType": "VariableDeclaration",
                  "scope": 8529,
                  "src": "15631:17:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8417,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "15631:7:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8420,
                  "name": "needleptr",
                  "nodeType": "VariableDeclaration",
                  "scope": 8529,
                  "src": "15654:17:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8419,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "15654:7:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "15583:92:35"
            },
            "payable": false,
            "returnParameters": {
              "id": 8424,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8423,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8529,
                  "src": "15698:7:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8422,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "15698:7:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "15697:9:35"
            },
            "scope": 9026,
            "src": "15566:1236:35",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "private"
          },
          {
            "body": {
              "id": 8568,
              "nodeType": "Block",
              "src": "17225:152:35",
              "statements": [
                {
                  "assignments": [
                    8539
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8539,
                      "name": "ptr",
                      "nodeType": "VariableDeclaration",
                      "scope": 8569,
                      "src": "17231:11:35",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8538,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "17231:7:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8550,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8541,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8531,
                          "src": "17253:4:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                            "typeString": "struct StringUtils.slice memory"
                          }
                        },
                        "id": 8542,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7335,
                        "src": "17253:9:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8543,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8531,
                          "src": "17264:4:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                            "typeString": "struct StringUtils.slice memory"
                          }
                        },
                        "id": 8544,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_ptr",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7337,
                        "src": "17264:9:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8545,
                          "name": "needle",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8533,
                          "src": "17275:6:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                            "typeString": "struct StringUtils.slice memory"
                          }
                        },
                        "id": 8546,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7335,
                        "src": "17275:11:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8547,
                          "name": "needle",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8533,
                          "src": "17288:6:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                            "typeString": "struct StringUtils.slice memory"
                          }
                        },
                        "id": 8548,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_ptr",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7337,
                        "src": "17288:11:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 8540,
                      "name": "findPtr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8412,
                      "src": "17245:7:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256,uint256,uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 8549,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17245:55:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "17231:69:35"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8558,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 8551,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8531,
                        "src": "17306:4:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                          "typeString": "struct StringUtils.slice memory"
                        }
                      },
                      "id": 8553,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7335,
                      "src": "17306:9:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "-=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 8557,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 8554,
                        "name": "ptr",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8539,
                        "src": "17319:3:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "-",
                      "rightExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8555,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8531,
                          "src": "17325:4:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                            "typeString": "struct StringUtils.slice memory"
                          }
                        },
                        "id": 8556,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_ptr",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7337,
                        "src": "17325:9:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "17319:15:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "17306:28:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 8559,
                  "nodeType": "ExpressionStatement",
                  "src": "17306:28:35"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8564,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 8560,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8531,
                        "src": "17340:4:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                          "typeString": "struct StringUtils.slice memory"
                        }
                      },
                      "id": 8562,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "_ptr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7337,
                      "src": "17340:9:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 8563,
                      "name": "ptr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8539,
                      "src": "17352:3:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "17340:15:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 8565,
                  "nodeType": "ExpressionStatement",
                  "src": "17340:15:35"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8566,
                    "name": "self",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8531,
                    "src": "17368:4:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                      "typeString": "struct StringUtils.slice memory"
                    }
                  },
                  "functionReturnParameters": 8537,
                  "id": 8567,
                  "nodeType": "Return",
                  "src": "17361:11:35"
                }
              ]
            },
            "documentation": null,
            "id": 8569,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "find",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8534,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8531,
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 8569,
                  "src": "17134:17:35",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                    "typeString": "struct StringUtils.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8530,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7338,
                    "src": "17134:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$7338_storage_ptr",
                      "typeString": "struct StringUtils.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8533,
                  "name": "needle",
                  "nodeType": "VariableDeclaration",
                  "scope": 8569,
                  "src": "17153:19:35",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                    "typeString": "struct StringUtils.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8532,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7338,
                    "src": "17153:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$7338_storage_ptr",
                      "typeString": "struct StringUtils.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "17133:40:35"
            },
            "payable": false,
            "returnParameters": {
              "id": 8537,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8536,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8569,
                  "src": "17209:5:35",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                    "typeString": "struct StringUtils.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8535,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7338,
                    "src": "17209:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$7338_storage_ptr",
                      "typeString": "struct StringUtils.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "17208:14:35"
            },
            "scope": 9026,
            "src": "17120:257:35",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 8602,
              "nodeType": "Block",
              "src": "17824:131:35",
              "statements": [
                {
                  "assignments": [
                    8579
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8579,
                      "name": "ptr",
                      "nodeType": "VariableDeclaration",
                      "scope": 8603,
                      "src": "17830:11:35",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8578,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "17830:7:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8590,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8581,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8571,
                          "src": "17853:4:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                            "typeString": "struct StringUtils.slice memory"
                          }
                        },
                        "id": 8582,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7335,
                        "src": "17853:9:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8583,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8571,
                          "src": "17864:4:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                            "typeString": "struct StringUtils.slice memory"
                          }
                        },
                        "id": 8584,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_ptr",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7337,
                        "src": "17864:9:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8585,
                          "name": "needle",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8573,
                          "src": "17875:6:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                            "typeString": "struct StringUtils.slice memory"
                          }
                        },
                        "id": 8586,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7335,
                        "src": "17875:11:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8587,
                          "name": "needle",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8573,
                          "src": "17888:6:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                            "typeString": "struct StringUtils.slice memory"
                          }
                        },
                        "id": 8588,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_ptr",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7337,
                        "src": "17888:11:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 8580,
                      "name": "rfindPtr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8529,
                      "src": "17844:8:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256,uint256,uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 8589,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17844:56:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "17830:70:35"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8598,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 8591,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8571,
                        "src": "17906:4:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                          "typeString": "struct StringUtils.slice memory"
                        }
                      },
                      "id": 8593,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7335,
                      "src": "17906:9:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 8597,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 8594,
                        "name": "ptr",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8579,
                        "src": "17918:3:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "-",
                      "rightExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8595,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8571,
                          "src": "17924:4:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                            "typeString": "struct StringUtils.slice memory"
                          }
                        },
                        "id": 8596,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_ptr",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7337,
                        "src": "17924:9:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "17918:15:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "17906:27:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 8599,
                  "nodeType": "ExpressionStatement",
                  "src": "17906:27:35"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8600,
                    "name": "self",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8571,
                    "src": "17946:4:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                      "typeString": "struct StringUtils.slice memory"
                    }
                  },
                  "functionReturnParameters": 8577,
                  "id": 8601,
                  "nodeType": "Return",
                  "src": "17939:11:35"
                }
              ]
            },
            "documentation": null,
            "id": 8603,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "rfind",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8574,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8571,
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 8603,
                  "src": "17733:17:35",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                    "typeString": "struct StringUtils.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8570,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7338,
                    "src": "17733:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$7338_storage_ptr",
                      "typeString": "struct StringUtils.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8573,
                  "name": "needle",
                  "nodeType": "VariableDeclaration",
                  "scope": 8603,
                  "src": "17752:19:35",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                    "typeString": "struct StringUtils.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8572,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7338,
                    "src": "17752:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$7338_storage_ptr",
                      "typeString": "struct StringUtils.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "17732:40:35"
            },
            "payable": false,
            "returnParameters": {
              "id": 8577,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8576,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8603,
                  "src": "17808:5:35",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                    "typeString": "struct StringUtils.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8575,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7338,
                    "src": "17808:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$7338_storage_ptr",
                      "typeString": "struct StringUtils.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "17807:14:35"
            },
            "scope": 9026,
            "src": "17718:237:35",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 8680,
              "nodeType": "Block",
              "src": "18567:341:35",
              "statements": [
                {
                  "assignments": [
                    8615
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8615,
                      "name": "ptr",
                      "nodeType": "VariableDeclaration",
                      "scope": 8681,
                      "src": "18573:11:35",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8614,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "18573:7:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8626,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8617,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8605,
                          "src": "18595:4:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                            "typeString": "struct StringUtils.slice memory"
                          }
                        },
                        "id": 8618,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7335,
                        "src": "18595:9:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8619,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8605,
                          "src": "18606:4:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                            "typeString": "struct StringUtils.slice memory"
                          }
                        },
                        "id": 8620,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_ptr",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7337,
                        "src": "18606:9:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8621,
                          "name": "needle",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8607,
                          "src": "18617:6:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                            "typeString": "struct StringUtils.slice memory"
                          }
                        },
                        "id": 8622,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7335,
                        "src": "18617:11:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8623,
                          "name": "needle",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8607,
                          "src": "18630:6:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                            "typeString": "struct StringUtils.slice memory"
                          }
                        },
                        "id": 8624,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_ptr",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7337,
                        "src": "18630:11:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 8616,
                      "name": "findPtr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8412,
                      "src": "18587:7:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256,uint256,uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 8625,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18587:55:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "18573:69:35"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8632,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 8627,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8609,
                        "src": "18648:5:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                          "typeString": "struct StringUtils.slice memory"
                        }
                      },
                      "id": 8629,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "_ptr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7337,
                      "src": "18648:10:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 8630,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8605,
                        "src": "18661:4:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                          "typeString": "struct StringUtils.slice memory"
                        }
                      },
                      "id": 8631,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_ptr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7337,
                      "src": "18661:9:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "18648:22:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 8633,
                  "nodeType": "ExpressionStatement",
                  "src": "18648:22:35"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8641,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 8634,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8609,
                        "src": "18676:5:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                          "typeString": "struct StringUtils.slice memory"
                        }
                      },
                      "id": 8636,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7335,
                      "src": "18676:10:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 8640,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 8637,
                        "name": "ptr",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8615,
                        "src": "18689:3:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "-",
                      "rightExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8638,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8605,
                          "src": "18695:4:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                            "typeString": "struct StringUtils.slice memory"
                          }
                        },
                        "id": 8639,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_ptr",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7337,
                        "src": "18695:9:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "18689:15:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "18676:28:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 8642,
                  "nodeType": "ExpressionStatement",
                  "src": "18676:28:35"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 8649,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 8643,
                      "name": "ptr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8615,
                      "src": "18714:3:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 8648,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8644,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8605,
                          "src": "18721:4:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                            "typeString": "struct StringUtils.slice memory"
                          }
                        },
                        "id": 8645,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_ptr",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7337,
                        "src": "18721:9:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "+",
                      "rightExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8646,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8605,
                          "src": "18733:4:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                            "typeString": "struct StringUtils.slice memory"
                          }
                        },
                        "id": 8647,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7335,
                        "src": "18733:9:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "18721:21:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "18714:28:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 8676,
                    "nodeType": "Block",
                    "src": "18797:89:35",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 8665,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 8657,
                              "name": "self",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8605,
                              "src": "18805:4:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                                "typeString": "struct StringUtils.slice memory"
                              }
                            },
                            "id": 8659,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "_len",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 7335,
                            "src": "18805:9:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "-=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 8664,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 8660,
                                "name": "token",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8609,
                                "src": "18818:5:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                                  "typeString": "struct StringUtils.slice memory"
                                }
                              },
                              "id": 8661,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "_len",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 7335,
                              "src": "18818:10:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "+",
                            "rightExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 8662,
                                "name": "needle",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8607,
                                "src": "18831:6:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                                  "typeString": "struct StringUtils.slice memory"
                                }
                              },
                              "id": 8663,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "_len",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 7335,
                              "src": "18831:11:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "18818:24:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "18805:37:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 8666,
                        "nodeType": "ExpressionStatement",
                        "src": "18805:37:35"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 8674,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 8667,
                              "name": "self",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8605,
                              "src": "18850:4:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                                "typeString": "struct StringUtils.slice memory"
                              }
                            },
                            "id": 8669,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "_ptr",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 7337,
                            "src": "18850:9:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 8673,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "id": 8670,
                              "name": "ptr",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8615,
                              "src": "18862:3:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "+",
                            "rightExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 8671,
                                "name": "needle",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8607,
                                "src": "18868:6:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                                  "typeString": "struct StringUtils.slice memory"
                                }
                              },
                              "id": 8672,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "_len",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 7335,
                              "src": "18868:11:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "18862:17:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "18850:29:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 8675,
                        "nodeType": "ExpressionStatement",
                        "src": "18850:29:35"
                      }
                    ]
                  },
                  "id": 8677,
                  "nodeType": "IfStatement",
                  "src": "18710:176:35",
                  "trueBody": {
                    "id": 8656,
                    "nodeType": "Block",
                    "src": "18744:47:35",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 8654,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 8650,
                              "name": "self",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8605,
                              "src": "18771:4:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                                "typeString": "struct StringUtils.slice memory"
                              }
                            },
                            "id": 8652,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "_len",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 7335,
                            "src": "18771:9:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 8653,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "18783:1:35",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "18771:13:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 8655,
                        "nodeType": "ExpressionStatement",
                        "src": "18771:13:35"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8678,
                    "name": "token",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8609,
                    "src": "18898:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                      "typeString": "struct StringUtils.slice memory"
                    }
                  },
                  "functionReturnParameters": 8613,
                  "id": 8679,
                  "nodeType": "Return",
                  "src": "18891:12:35"
                }
              ]
            },
            "documentation": null,
            "id": 8681,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "split",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8610,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8605,
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 8681,
                  "src": "18459:17:35",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                    "typeString": "struct StringUtils.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8604,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7338,
                    "src": "18459:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$7338_storage_ptr",
                      "typeString": "struct StringUtils.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8607,
                  "name": "needle",
                  "nodeType": "VariableDeclaration",
                  "scope": 8681,
                  "src": "18482:19:35",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                    "typeString": "struct StringUtils.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8606,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7338,
                    "src": "18482:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$7338_storage_ptr",
                      "typeString": "struct StringUtils.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8609,
                  "name": "token",
                  "nodeType": "VariableDeclaration",
                  "scope": 8681,
                  "src": "18507:18:35",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                    "typeString": "struct StringUtils.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8608,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7338,
                    "src": "18507:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$7338_storage_ptr",
                      "typeString": "struct StringUtils.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "18453:76:35"
            },
            "payable": false,
            "returnParameters": {
              "id": 8613,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8612,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8681,
                  "src": "18553:5:35",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                    "typeString": "struct StringUtils.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8611,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7338,
                    "src": "18553:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$7338_storage_ptr",
                      "typeString": "struct StringUtils.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "18552:14:35"
            },
            "scope": 9026,
            "src": "18439:469:35",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 8696,
              "nodeType": "Block",
              "src": "19471:37:35",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8691,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8683,
                        "src": "19483:4:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                          "typeString": "struct StringUtils.slice memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8692,
                        "name": "needle",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8685,
                        "src": "19489:6:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                          "typeString": "struct StringUtils.slice memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8693,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8688,
                        "src": "19497:5:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                          "typeString": "struct StringUtils.slice memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                          "typeString": "struct StringUtils.slice memory"
                        },
                        {
                          "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                          "typeString": "struct StringUtils.slice memory"
                        },
                        {
                          "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                          "typeString": "struct StringUtils.slice memory"
                        }
                      ],
                      "id": 8690,
                      "name": "split",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        8681,
                        8697
                      ],
                      "referencedDeclaration": 8681,
                      "src": "19477:5:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_struct$_slice_$7338_memory_ptr_$_t_struct$_slice_$7338_memory_ptr_$_t_struct$_slice_$7338_memory_ptr_$returns$_t_struct$_slice_$7338_memory_ptr_$",
                        "typeString": "function (struct StringUtils.slice memory,struct StringUtils.slice memory,struct StringUtils.slice memory) pure returns (struct StringUtils.slice memory)"
                      }
                    },
                    "id": 8694,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "19477:26:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                      "typeString": "struct StringUtils.slice memory"
                    }
                  },
                  "id": 8695,
                  "nodeType": "ExpressionStatement",
                  "src": "19477:26:35"
                }
              ]
            },
            "documentation": null,
            "id": 8697,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "split",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8686,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8683,
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 8697,
                  "src": "19374:17:35",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                    "typeString": "struct StringUtils.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8682,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7338,
                    "src": "19374:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$7338_storage_ptr",
                      "typeString": "struct StringUtils.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8685,
                  "name": "needle",
                  "nodeType": "VariableDeclaration",
                  "scope": 8697,
                  "src": "19393:19:35",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                    "typeString": "struct StringUtils.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8684,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7338,
                    "src": "19393:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$7338_storage_ptr",
                      "typeString": "struct StringUtils.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "19373:40:35"
            },
            "payable": false,
            "returnParameters": {
              "id": 8689,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8688,
                  "name": "token",
                  "nodeType": "VariableDeclaration",
                  "scope": 8697,
                  "src": "19449:18:35",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                    "typeString": "struct StringUtils.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8687,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7338,
                    "src": "19449:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$7338_storage_ptr",
                      "typeString": "struct StringUtils.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "19448:20:35"
            },
            "scope": 9026,
            "src": "19359:149:35",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 8765,
              "nodeType": "Block",
              "src": "20120:301:35",
              "statements": [
                {
                  "assignments": [
                    8709
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8709,
                      "name": "ptr",
                      "nodeType": "VariableDeclaration",
                      "scope": 8766,
                      "src": "20126:11:35",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8708,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "20126:7:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8720,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8711,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8699,
                          "src": "20149:4:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                            "typeString": "struct StringUtils.slice memory"
                          }
                        },
                        "id": 8712,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7335,
                        "src": "20149:9:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8713,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8699,
                          "src": "20160:4:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                            "typeString": "struct StringUtils.slice memory"
                          }
                        },
                        "id": 8714,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_ptr",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7337,
                        "src": "20160:9:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8715,
                          "name": "needle",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8701,
                          "src": "20171:6:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                            "typeString": "struct StringUtils.slice memory"
                          }
                        },
                        "id": 8716,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7335,
                        "src": "20171:11:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8717,
                          "name": "needle",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8701,
                          "src": "20184:6:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                            "typeString": "struct StringUtils.slice memory"
                          }
                        },
                        "id": 8718,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_ptr",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7337,
                        "src": "20184:11:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 8710,
                      "name": "rfindPtr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8529,
                      "src": "20140:8:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256,uint256,uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 8719,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "20140:56:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "20126:70:35"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8725,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 8721,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8703,
                        "src": "20202:5:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                          "typeString": "struct StringUtils.slice memory"
                        }
                      },
                      "id": 8723,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "_ptr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7337,
                      "src": "20202:10:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 8724,
                      "name": "ptr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8709,
                      "src": "20215:3:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "20202:16:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 8726,
                  "nodeType": "ExpressionStatement",
                  "src": "20202:16:35"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8738,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 8727,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8703,
                        "src": "20224:5:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                          "typeString": "struct StringUtils.slice memory"
                        }
                      },
                      "id": 8729,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7335,
                      "src": "20224:10:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 8737,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8730,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8699,
                          "src": "20237:4:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                            "typeString": "struct StringUtils.slice memory"
                          }
                        },
                        "id": 8731,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7335,
                        "src": "20237:9:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "-",
                      "rightExpression": {
                        "argumentTypes": null,
                        "components": [
                          {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 8735,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "id": 8732,
                              "name": "ptr",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8709,
                              "src": "20250:3:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "-",
                            "rightExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 8733,
                                "name": "self",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8699,
                                "src": "20256:4:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                                  "typeString": "struct StringUtils.slice memory"
                                }
                              },
                              "id": 8734,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "_ptr",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 7337,
                              "src": "20256:9:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "20250:15:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "id": 8736,
                        "isConstant": false,
                        "isInlineArray": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "TupleExpression",
                        "src": "20249:17:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "20237:29:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "20224:42:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 8739,
                  "nodeType": "ExpressionStatement",
                  "src": "20224:42:35"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 8743,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 8740,
                      "name": "ptr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8709,
                      "src": "20276:3:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 8741,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8699,
                        "src": "20283:4:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                          "typeString": "struct StringUtils.slice memory"
                        }
                      },
                      "id": 8742,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_ptr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7337,
                      "src": "20283:9:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "20276:16:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 8761,
                    "nodeType": "Block",
                    "src": "20347:52:35",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 8759,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 8751,
                              "name": "self",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8699,
                              "src": "20355:4:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                                "typeString": "struct StringUtils.slice memory"
                              }
                            },
                            "id": 8753,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "_len",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 7335,
                            "src": "20355:9:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "-=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 8758,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 8754,
                                "name": "token",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8703,
                                "src": "20368:5:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                                  "typeString": "struct StringUtils.slice memory"
                                }
                              },
                              "id": 8755,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "_len",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 7335,
                              "src": "20368:10:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "+",
                            "rightExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 8756,
                                "name": "needle",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8701,
                                "src": "20381:6:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                                  "typeString": "struct StringUtils.slice memory"
                                }
                              },
                              "id": 8757,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "_len",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 7335,
                              "src": "20381:11:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "20368:24:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "20355:37:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 8760,
                        "nodeType": "ExpressionStatement",
                        "src": "20355:37:35"
                      }
                    ]
                  },
                  "id": 8762,
                  "nodeType": "IfStatement",
                  "src": "20272:127:35",
                  "trueBody": {
                    "id": 8750,
                    "nodeType": "Block",
                    "src": "20294:47:35",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 8748,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 8744,
                              "name": "self",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8699,
                              "src": "20321:4:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                                "typeString": "struct StringUtils.slice memory"
                              }
                            },
                            "id": 8746,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "_len",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 7335,
                            "src": "20321:9:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 8747,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "20333:1:35",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "20321:13:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 8749,
                        "nodeType": "ExpressionStatement",
                        "src": "20321:13:35"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8763,
                    "name": "token",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8703,
                    "src": "20411:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                      "typeString": "struct StringUtils.slice memory"
                    }
                  },
                  "functionReturnParameters": 8707,
                  "id": 8764,
                  "nodeType": "Return",
                  "src": "20404:12:35"
                }
              ]
            },
            "documentation": null,
            "id": 8766,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "rsplit",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8704,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8699,
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 8766,
                  "src": "20012:17:35",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                    "typeString": "struct StringUtils.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8698,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7338,
                    "src": "20012:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$7338_storage_ptr",
                      "typeString": "struct StringUtils.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8701,
                  "name": "needle",
                  "nodeType": "VariableDeclaration",
                  "scope": 8766,
                  "src": "20035:19:35",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                    "typeString": "struct StringUtils.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8700,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7338,
                    "src": "20035:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$7338_storage_ptr",
                      "typeString": "struct StringUtils.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8703,
                  "name": "token",
                  "nodeType": "VariableDeclaration",
                  "scope": 8766,
                  "src": "20060:18:35",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                    "typeString": "struct StringUtils.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8702,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7338,
                    "src": "20060:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$7338_storage_ptr",
                      "typeString": "struct StringUtils.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "20006:76:35"
            },
            "payable": false,
            "returnParameters": {
              "id": 8707,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8706,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8766,
                  "src": "20106:5:35",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                    "typeString": "struct StringUtils.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8705,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7338,
                    "src": "20106:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$7338_storage_ptr",
                      "typeString": "struct StringUtils.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "20105:14:35"
            },
            "scope": 9026,
            "src": "19991:430:35",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 8781,
              "nodeType": "Block",
              "src": "20983:38:35",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8776,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8768,
                        "src": "20996:4:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                          "typeString": "struct StringUtils.slice memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8777,
                        "name": "needle",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8770,
                        "src": "21002:6:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                          "typeString": "struct StringUtils.slice memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8778,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8773,
                        "src": "21010:5:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                          "typeString": "struct StringUtils.slice memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                          "typeString": "struct StringUtils.slice memory"
                        },
                        {
                          "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                          "typeString": "struct StringUtils.slice memory"
                        },
                        {
                          "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                          "typeString": "struct StringUtils.slice memory"
                        }
                      ],
                      "id": 8775,
                      "name": "rsplit",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        8766,
                        8782
                      ],
                      "referencedDeclaration": 8766,
                      "src": "20989:6:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_struct$_slice_$7338_memory_ptr_$_t_struct$_slice_$7338_memory_ptr_$_t_struct$_slice_$7338_memory_ptr_$returns$_t_struct$_slice_$7338_memory_ptr_$",
                        "typeString": "function (struct StringUtils.slice memory,struct StringUtils.slice memory,struct StringUtils.slice memory) pure returns (struct StringUtils.slice memory)"
                      }
                    },
                    "id": 8779,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "20989:27:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                      "typeString": "struct StringUtils.slice memory"
                    }
                  },
                  "id": 8780,
                  "nodeType": "ExpressionStatement",
                  "src": "20989:27:35"
                }
              ]
            },
            "documentation": null,
            "id": 8782,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "rsplit",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8771,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8768,
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 8782,
                  "src": "20886:17:35",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                    "typeString": "struct StringUtils.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8767,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7338,
                    "src": "20886:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$7338_storage_ptr",
                      "typeString": "struct StringUtils.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8770,
                  "name": "needle",
                  "nodeType": "VariableDeclaration",
                  "scope": 8782,
                  "src": "20905:19:35",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                    "typeString": "struct StringUtils.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8769,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7338,
                    "src": "20905:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$7338_storage_ptr",
                      "typeString": "struct StringUtils.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "20885:40:35"
            },
            "payable": false,
            "returnParameters": {
              "id": 8774,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8773,
                  "name": "token",
                  "nodeType": "VariableDeclaration",
                  "scope": 8782,
                  "src": "20961:18:35",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                    "typeString": "struct StringUtils.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8772,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7338,
                    "src": "20961:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$7338_storage_ptr",
                      "typeString": "struct StringUtils.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "20960:20:35"
            },
            "scope": 9026,
            "src": "20870:151:35",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 8840,
              "nodeType": "Block",
              "src": "21381:275:35",
              "statements": [
                {
                  "assignments": [
                    8792
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8792,
                      "name": "ptr",
                      "nodeType": "VariableDeclaration",
                      "scope": 8841,
                      "src": "21387:11:35",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8791,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "21387:7:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8806,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 8805,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 8794,
                            "name": "self",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8784,
                            "src": "21415:4:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                              "typeString": "struct StringUtils.slice memory"
                            }
                          },
                          "id": 8795,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "_len",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 7335,
                          "src": "21415:9:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 8796,
                            "name": "self",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8784,
                            "src": "21426:4:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                              "typeString": "struct StringUtils.slice memory"
                            }
                          },
                          "id": 8797,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "_ptr",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 7337,
                          "src": "21426:9:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 8798,
                            "name": "needle",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8786,
                            "src": "21437:6:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                              "typeString": "struct StringUtils.slice memory"
                            }
                          },
                          "id": 8799,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "_len",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 7335,
                          "src": "21437:11:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 8800,
                            "name": "needle",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8786,
                            "src": "21450:6:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                              "typeString": "struct StringUtils.slice memory"
                            }
                          },
                          "id": 8801,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "_ptr",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 7337,
                          "src": "21450:11:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 8793,
                        "name": "findPtr",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8412,
                        "src": "21407:7:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                          "typeString": "function (uint256,uint256,uint256,uint256) pure returns (uint256)"
                        }
                      },
                      "id": 8802,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "21407:55:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "+",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 8803,
                        "name": "needle",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8786,
                        "src": "21465:6:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                          "typeString": "struct StringUtils.slice memory"
                        }
                      },
                      "id": 8804,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7335,
                      "src": "21465:11:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "21407:69:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "21387:89:35"
                },
                {
                  "body": {
                    "id": 8838,
                    "nodeType": "Block",
                    "src": "21519:133:35",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 8815,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "++",
                          "prefix": false,
                          "src": "21527:5:35",
                          "subExpression": {
                            "argumentTypes": null,
                            "id": 8814,
                            "name": "cnt",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8789,
                            "src": "21527:3:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 8816,
                        "nodeType": "ExpressionStatement",
                        "src": "21527:5:35"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 8836,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 8817,
                            "name": "ptr",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8792,
                            "src": "21540:3:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 8835,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 8826,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 8819,
                                      "name": "self",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 8784,
                                      "src": "21562:4:35",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                                        "typeString": "struct StringUtils.slice memory"
                                      }
                                    },
                                    "id": 8820,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "_len",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 7335,
                                    "src": "21562:9:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "-",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "components": [
                                      {
                                        "argumentTypes": null,
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 8824,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "argumentTypes": null,
                                          "id": 8821,
                                          "name": "ptr",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 8792,
                                          "src": "21575:3:35",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "-",
                                        "rightExpression": {
                                          "argumentTypes": null,
                                          "expression": {
                                            "argumentTypes": null,
                                            "id": 8822,
                                            "name": "self",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 8784,
                                            "src": "21581:4:35",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                                              "typeString": "struct StringUtils.slice memory"
                                            }
                                          },
                                          "id": 8823,
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "_ptr",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 7337,
                                          "src": "21581:9:35",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "src": "21575:15:35",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "id": 8825,
                                    "isConstant": false,
                                    "isInlineArray": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "TupleExpression",
                                    "src": "21574:17:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "21562:29:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 8827,
                                  "name": "ptr",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8792,
                                  "src": "21593:3:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 8828,
                                    "name": "needle",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8786,
                                    "src": "21598:6:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                                      "typeString": "struct StringUtils.slice memory"
                                    }
                                  },
                                  "id": 8829,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "_len",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 7335,
                                  "src": "21598:11:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 8830,
                                    "name": "needle",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8786,
                                    "src": "21611:6:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                                      "typeString": "struct StringUtils.slice memory"
                                    }
                                  },
                                  "id": 8831,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "_ptr",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 7337,
                                  "src": "21611:11:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 8818,
                                "name": "findPtr",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8412,
                                "src": "21554:7:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                  "typeString": "function (uint256,uint256,uint256,uint256) pure returns (uint256)"
                                }
                              },
                              "id": 8832,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "21554:69:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "+",
                            "rightExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 8833,
                                "name": "needle",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8786,
                                "src": "21634:6:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                                  "typeString": "struct StringUtils.slice memory"
                                }
                              },
                              "id": 8834,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "_len",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 7335,
                              "src": "21634:11:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "21554:91:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "21540:105:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 8837,
                        "nodeType": "ExpressionStatement",
                        "src": "21540:105:35"
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 8813,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 8807,
                      "name": "ptr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8792,
                      "src": "21489:3:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 8812,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8808,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8784,
                          "src": "21496:4:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                            "typeString": "struct StringUtils.slice memory"
                          }
                        },
                        "id": 8809,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_ptr",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7337,
                        "src": "21496:9:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "+",
                      "rightExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8810,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8784,
                          "src": "21508:4:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                            "typeString": "struct StringUtils.slice memory"
                          }
                        },
                        "id": 8811,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7335,
                        "src": "21508:9:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "21496:21:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "21489:28:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 8839,
                  "nodeType": "WhileStatement",
                  "src": "21482:170:35"
                }
              ]
            },
            "documentation": null,
            "id": 8841,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "count",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8787,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8784,
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 8841,
                  "src": "21291:17:35",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                    "typeString": "struct StringUtils.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8783,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7338,
                    "src": "21291:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$7338_storage_ptr",
                      "typeString": "struct StringUtils.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8786,
                  "name": "needle",
                  "nodeType": "VariableDeclaration",
                  "scope": 8841,
                  "src": "21310:19:35",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                    "typeString": "struct StringUtils.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8785,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7338,
                    "src": "21310:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$7338_storage_ptr",
                      "typeString": "struct StringUtils.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "21290:40:35"
            },
            "payable": false,
            "returnParameters": {
              "id": 8790,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8789,
                  "name": "cnt",
                  "nodeType": "VariableDeclaration",
                  "scope": 8841,
                  "src": "21366:11:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8788,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "21366:7:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "21365:13:35"
            },
            "scope": 9026,
            "src": "21276:380:35",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 8864,
              "nodeType": "Block",
              "src": "21982:93:35",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 8862,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 8851,
                            "name": "self",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8843,
                            "src": "22010:4:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                              "typeString": "struct StringUtils.slice memory"
                            }
                          },
                          "id": 8852,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "_len",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 7335,
                          "src": "22010:9:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 8853,
                            "name": "self",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8843,
                            "src": "22021:4:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                              "typeString": "struct StringUtils.slice memory"
                            }
                          },
                          "id": 8854,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "_ptr",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 7337,
                          "src": "22021:9:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 8855,
                            "name": "needle",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8845,
                            "src": "22032:6:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                              "typeString": "struct StringUtils.slice memory"
                            }
                          },
                          "id": 8856,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "_len",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 7335,
                          "src": "22032:11:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 8857,
                            "name": "needle",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8845,
                            "src": "22045:6:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                              "typeString": "struct StringUtils.slice memory"
                            }
                          },
                          "id": 8858,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "_ptr",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 7337,
                          "src": "22045:11:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 8850,
                        "name": "rfindPtr",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8529,
                        "src": "22001:8:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                          "typeString": "function (uint256,uint256,uint256,uint256) pure returns (uint256)"
                        }
                      },
                      "id": 8859,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "22001:56:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 8860,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8843,
                        "src": "22061:4:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                          "typeString": "struct StringUtils.slice memory"
                        }
                      },
                      "id": 8861,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_ptr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7337,
                      "src": "22061:9:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "22001:69:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 8849,
                  "id": 8863,
                  "nodeType": "Return",
                  "src": "21988:82:35"
                }
              ]
            },
            "documentation": null,
            "id": 8865,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "contains",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8846,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8843,
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 8865,
                  "src": "21899:17:35",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                    "typeString": "struct StringUtils.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8842,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7338,
                    "src": "21899:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$7338_storage_ptr",
                      "typeString": "struct StringUtils.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8845,
                  "name": "needle",
                  "nodeType": "VariableDeclaration",
                  "scope": 8865,
                  "src": "21918:19:35",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                    "typeString": "struct StringUtils.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8844,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7338,
                    "src": "21918:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$7338_storage_ptr",
                      "typeString": "struct StringUtils.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "21898:40:35"
            },
            "payable": false,
            "returnParameters": {
              "id": 8849,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8848,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8865,
                  "src": "21974:4:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 8847,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "21974:4:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "21973:6:35"
            },
            "scope": 9026,
            "src": "21881:194:35",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 8910,
              "nodeType": "Block",
              "src": "22453:249:35",
              "statements": [
                {
                  "assignments": [
                    8875
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8875,
                      "name": "ret",
                      "nodeType": "VariableDeclaration",
                      "scope": 8911,
                      "src": "22459:17:35",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string"
                      },
                      "typeName": {
                        "id": 8874,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "22459:6:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage_ptr",
                          "typeString": "string"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8884,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 8882,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 8878,
                            "name": "self",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8867,
                            "src": "22490:4:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                              "typeString": "struct StringUtils.slice memory"
                            }
                          },
                          "id": 8879,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "_len",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 7335,
                          "src": "22490:9:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "+",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 8880,
                            "name": "other",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8869,
                            "src": "22502:5:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                              "typeString": "struct StringUtils.slice memory"
                            }
                          },
                          "id": 8881,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "_len",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 7335,
                          "src": "22502:10:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "22490:22:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 8877,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "22479:10:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_string_memory_$",
                        "typeString": "function (uint256) pure returns (string memory)"
                      },
                      "typeName": {
                        "id": 8876,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "22483:6:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage_ptr",
                          "typeString": "string"
                        }
                      }
                    },
                    "id": 8883,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "22479:34:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_memory",
                      "typeString": "string memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "22459:54:35"
                },
                {
                  "assignments": [],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8886,
                      "name": "retptr",
                      "nodeType": "VariableDeclaration",
                      "scope": 8911,
                      "src": "22519:14:35",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8885,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "22519:7:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8887,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "22519:14:35"
                },
                {
                  "externalReferences": [
                    {
                      "retptr": {
                        "declaration": 8886,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "22556:6:35",
                        "valueSize": 1
                      }
                    },
                    {
                      "ret": {
                        "declaration": 8875,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "22570:3:35",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 8888,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    retptr := add(ret, 32)\n}",
                  "src": "22539:56:35"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8890,
                        "name": "retptr",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8886,
                        "src": "22596:6:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8891,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8867,
                          "src": "22604:4:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                            "typeString": "struct StringUtils.slice memory"
                          }
                        },
                        "id": 8892,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_ptr",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7337,
                        "src": "22604:9:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8893,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8867,
                          "src": "22615:4:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                            "typeString": "struct StringUtils.slice memory"
                          }
                        },
                        "id": 8894,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7335,
                        "src": "22615:9:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 8889,
                      "name": "memcpy",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7378,
                      "src": "22589:6:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (uint256,uint256,uint256) pure"
                      }
                    },
                    "id": 8895,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "22589:36:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8896,
                  "nodeType": "ExpressionStatement",
                  "src": "22589:36:35"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 8901,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 8898,
                          "name": "retptr",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8886,
                          "src": "22638:6:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "+",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 8899,
                            "name": "self",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8867,
                            "src": "22647:4:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                              "typeString": "struct StringUtils.slice memory"
                            }
                          },
                          "id": 8900,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "_len",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 7335,
                          "src": "22647:9:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "22638:18:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8902,
                          "name": "other",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8869,
                          "src": "22658:5:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                            "typeString": "struct StringUtils.slice memory"
                          }
                        },
                        "id": 8903,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_ptr",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7337,
                        "src": "22658:10:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8904,
                          "name": "other",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8869,
                          "src": "22670:5:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                            "typeString": "struct StringUtils.slice memory"
                          }
                        },
                        "id": 8905,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7335,
                        "src": "22670:10:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 8897,
                      "name": "memcpy",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7378,
                      "src": "22631:6:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (uint256,uint256,uint256) pure"
                      }
                    },
                    "id": 8906,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "22631:50:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8907,
                  "nodeType": "ExpressionStatement",
                  "src": "22631:50:35"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8908,
                    "name": "ret",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8875,
                    "src": "22694:3:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_memory_ptr",
                      "typeString": "string memory"
                    }
                  },
                  "functionReturnParameters": 8873,
                  "id": 8909,
                  "nodeType": "Return",
                  "src": "22687:10:35"
                }
              ]
            },
            "documentation": null,
            "id": 8911,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "concat",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8870,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8867,
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 8911,
                  "src": "22362:17:35",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                    "typeString": "struct StringUtils.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8866,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7338,
                    "src": "22362:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$7338_storage_ptr",
                      "typeString": "struct StringUtils.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8869,
                  "name": "other",
                  "nodeType": "VariableDeclaration",
                  "scope": 8911,
                  "src": "22381:18:35",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                    "typeString": "struct StringUtils.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8868,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7338,
                    "src": "22381:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$7338_storage_ptr",
                      "typeString": "struct StringUtils.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "22361:39:35"
            },
            "payable": false,
            "returnParameters": {
              "id": 8873,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8872,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8911,
                  "src": "22436:6:35",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 8871,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "22436:6:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "22435:15:35"
            },
            "scope": 9026,
            "src": "22346:356:35",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 9024,
              "nodeType": "Block",
              "src": "23127:549:35",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 8924,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 8921,
                        "name": "parts",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8916,
                        "src": "23137:5:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_slice_$7338_memory_$dyn_memory_ptr",
                          "typeString": "struct StringUtils.slice memory[] memory"
                        }
                      },
                      "id": 8922,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "23137:12:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 8923,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "23153:1:35",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "23137:17:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 8927,
                  "nodeType": "IfStatement",
                  "src": "23133:32:35",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "hexValue": "",
                      "id": 8925,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "string",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "23163:2:35",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                        "typeString": "literal_string \"\""
                      },
                      "value": ""
                    },
                    "functionReturnParameters": 8920,
                    "id": 8926,
                    "nodeType": "Return",
                    "src": "23156:9:35"
                  }
                },
                {
                  "assignments": [
                    8929
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8929,
                      "name": "length",
                      "nodeType": "VariableDeclaration",
                      "scope": 9025,
                      "src": "23172:14:35",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8928,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "23172:7:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8938,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 8937,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 8930,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8913,
                        "src": "23189:4:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                          "typeString": "struct StringUtils.slice memory"
                        }
                      },
                      "id": 8931,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7335,
                      "src": "23189:9:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "*",
                    "rightExpression": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 8935,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 8932,
                              "name": "parts",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8916,
                              "src": "23202:5:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_struct$_slice_$7338_memory_$dyn_memory_ptr",
                                "typeString": "struct StringUtils.slice memory[] memory"
                              }
                            },
                            "id": 8933,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "23202:12:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "-",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "31",
                            "id": 8934,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "23217:1:35",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "src": "23202:16:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "id": 8936,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "23201:18:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "23189:30:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "23172:47:35"
                },
                {
                  "body": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 8955,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftHandSide": {
                        "argumentTypes": null,
                        "id": 8950,
                        "name": "length",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8929,
                        "src": "23268:6:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "Assignment",
                      "operator": "+=",
                      "rightHandSide": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 8951,
                            "name": "parts",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8916,
                            "src": "23278:5:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_struct$_slice_$7338_memory_$dyn_memory_ptr",
                              "typeString": "struct StringUtils.slice memory[] memory"
                            }
                          },
                          "id": 8953,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 8952,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8940,
                            "src": "23284:1:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "23278:8:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$7338_memory",
                            "typeString": "struct StringUtils.slice memory"
                          }
                        },
                        "id": 8954,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7335,
                        "src": "23278:13:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "23268:23:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 8956,
                    "nodeType": "ExpressionStatement",
                    "src": "23268:23:35"
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 8946,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 8943,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8940,
                      "src": "23245:1:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 8944,
                        "name": "parts",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8916,
                        "src": "23249:5:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_slice_$7338_memory_$dyn_memory_ptr",
                          "typeString": "struct StringUtils.slice memory[] memory"
                        }
                      },
                      "id": 8945,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "23249:12:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "23245:16:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 8957,
                  "initializationExpression": {
                    "assignments": [
                      8940
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 8940,
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "scope": 9025,
                        "src": "23230:9:35",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 8939,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "23230:7:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 8942,
                    "initialValue": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 8941,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "23242:1:35",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "23230:13:35"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 8948,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "23263:3:35",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 8947,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8940,
                        "src": "23263:1:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 8949,
                    "nodeType": "ExpressionStatement",
                    "src": "23263:3:35"
                  },
                  "nodeType": "ForStatement",
                  "src": "23225:66:35"
                },
                {
                  "assignments": [
                    8959
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8959,
                      "name": "ret",
                      "nodeType": "VariableDeclaration",
                      "scope": 9025,
                      "src": "23298:17:35",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string"
                      },
                      "typeName": {
                        "id": 8958,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "23298:6:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage_ptr",
                          "typeString": "string"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8964,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8962,
                        "name": "length",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8929,
                        "src": "23329:6:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 8961,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "23318:10:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_string_memory_$",
                        "typeString": "function (uint256) pure returns (string memory)"
                      },
                      "typeName": {
                        "id": 8960,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "23322:6:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage_ptr",
                          "typeString": "string"
                        }
                      }
                    },
                    "id": 8963,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "23318:18:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_memory",
                      "typeString": "string memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "23298:38:35"
                },
                {
                  "assignments": [],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8966,
                      "name": "retptr",
                      "nodeType": "VariableDeclaration",
                      "scope": 9025,
                      "src": "23342:14:35",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8965,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "23342:7:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8967,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "23342:14:35"
                },
                {
                  "externalReferences": [
                    {
                      "retptr": {
                        "declaration": 8966,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "23379:6:35",
                        "valueSize": 1
                      }
                    },
                    {
                      "ret": {
                        "declaration": 8959,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "23393:3:35",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 8968,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    retptr := add(ret, 32)\n}",
                  "src": "23362:54:35"
                },
                {
                  "body": {
                    "id": 9020,
                    "nodeType": "Block",
                    "src": "23448:207:35",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 8981,
                              "name": "retptr",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8966,
                              "src": "23463:6:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "id": 8982,
                                  "name": "parts",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8916,
                                  "src": "23471:5:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_struct$_slice_$7338_memory_$dyn_memory_ptr",
                                    "typeString": "struct StringUtils.slice memory[] memory"
                                  }
                                },
                                "id": 8984,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "id": 8983,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8940,
                                  "src": "23477:1:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "23471:8:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_slice_$7338_memory",
                                  "typeString": "struct StringUtils.slice memory"
                                }
                              },
                              "id": 8985,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "_ptr",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 7337,
                              "src": "23471:13:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "id": 8986,
                                  "name": "parts",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8916,
                                  "src": "23486:5:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_struct$_slice_$7338_memory_$dyn_memory_ptr",
                                    "typeString": "struct StringUtils.slice memory[] memory"
                                  }
                                },
                                "id": 8988,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "id": 8987,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8940,
                                  "src": "23492:1:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "23486:8:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_slice_$7338_memory",
                                  "typeString": "struct StringUtils.slice memory"
                                }
                              },
                              "id": 8989,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "_len",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 7335,
                              "src": "23486:13:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 8980,
                            "name": "memcpy",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7378,
                            "src": "23456:6:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
                              "typeString": "function (uint256,uint256,uint256) pure"
                            }
                          },
                          "id": 8990,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "23456:44:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 8991,
                        "nodeType": "ExpressionStatement",
                        "src": "23456:44:35"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 8997,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 8992,
                            "name": "retptr",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8966,
                            "src": "23508:6:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 8993,
                                "name": "parts",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8916,
                                "src": "23518:5:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_struct$_slice_$7338_memory_$dyn_memory_ptr",
                                  "typeString": "struct StringUtils.slice memory[] memory"
                                }
                              },
                              "id": 8995,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 8994,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8940,
                                "src": "23524:1:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "23518:8:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_slice_$7338_memory",
                                "typeString": "struct StringUtils.slice memory"
                              }
                            },
                            "id": 8996,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "_len",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 7335,
                            "src": "23518:13:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "23508:23:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 8998,
                        "nodeType": "ExpressionStatement",
                        "src": "23508:23:35"
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 9004,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 8999,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8940,
                            "src": "23543:1:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 9003,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 9000,
                                "name": "parts",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8916,
                                "src": "23547:5:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_struct$_slice_$7338_memory_$dyn_memory_ptr",
                                  "typeString": "struct StringUtils.slice memory[] memory"
                                }
                              },
                              "id": 9001,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "length",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "23547:12:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "-",
                            "rightExpression": {
                              "argumentTypes": null,
                              "hexValue": "31",
                              "id": 9002,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "23562:1:35",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            },
                            "src": "23547:16:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "23543:20:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 9019,
                        "nodeType": "IfStatement",
                        "src": "23539:110:35",
                        "trueBody": {
                          "id": 9018,
                          "nodeType": "Block",
                          "src": "23565:84:35",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 9006,
                                    "name": "retptr",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8966,
                                    "src": "23582:6:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 9007,
                                      "name": "self",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 8913,
                                      "src": "23590:4:35",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                                        "typeString": "struct StringUtils.slice memory"
                                      }
                                    },
                                    "id": 9008,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "_ptr",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 7337,
                                    "src": "23590:9:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 9009,
                                      "name": "self",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 8913,
                                      "src": "23601:4:35",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                                        "typeString": "struct StringUtils.slice memory"
                                      }
                                    },
                                    "id": 9010,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "_len",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 7335,
                                    "src": "23601:9:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 9005,
                                  "name": "memcpy",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7378,
                                  "src": "23575:6:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
                                    "typeString": "function (uint256,uint256,uint256) pure"
                                  }
                                },
                                "id": 9011,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "23575:36:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 9012,
                              "nodeType": "ExpressionStatement",
                              "src": "23575:36:35"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 9016,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 9013,
                                  "name": "retptr",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8966,
                                  "src": "23621:6:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "+=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 9014,
                                    "name": "self",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8913,
                                    "src": "23631:4:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                                      "typeString": "struct StringUtils.slice memory"
                                    }
                                  },
                                  "id": 9015,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "_len",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 7335,
                                  "src": "23631:9:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "23621:19:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 9017,
                              "nodeType": "ExpressionStatement",
                              "src": "23621:19:35"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 8976,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 8973,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8940,
                      "src": "23425:1:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 8974,
                        "name": "parts",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8916,
                        "src": "23429:5:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_slice_$7338_memory_$dyn_memory_ptr",
                          "typeString": "struct StringUtils.slice memory[] memory"
                        }
                      },
                      "id": 8975,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "23429:12:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "23425:16:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 9021,
                  "initializationExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 8971,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftHandSide": {
                        "argumentTypes": null,
                        "id": 8969,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8940,
                        "src": "23418:1:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "Assignment",
                      "operator": "=",
                      "rightHandSide": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 8970,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "23422:1:35",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "23418:5:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 8972,
                    "nodeType": "ExpressionStatement",
                    "src": "23418:5:35"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 8978,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "23443:3:35",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 8977,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8940,
                        "src": "23443:1:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 8979,
                    "nodeType": "ExpressionStatement",
                    "src": "23443:3:35"
                  },
                  "nodeType": "ForStatement",
                  "src": "23413:242:35"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 9022,
                    "name": "ret",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8959,
                    "src": "23668:3:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_memory_ptr",
                      "typeString": "string memory"
                    }
                  },
                  "functionReturnParameters": 8920,
                  "id": 9023,
                  "nodeType": "Return",
                  "src": "23661:10:35"
                }
              ]
            },
            "documentation": null,
            "id": 9025,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "join",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8917,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8913,
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 9025,
                  "src": "23034:17:35",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                    "typeString": "struct StringUtils.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8912,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7338,
                    "src": "23034:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$7338_storage_ptr",
                      "typeString": "struct StringUtils.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8916,
                  "name": "parts",
                  "nodeType": "VariableDeclaration",
                  "scope": 9025,
                  "src": "23053:20:35",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_struct$_slice_$7338_memory_$dyn_memory_ptr",
                    "typeString": "struct StringUtils.slice[]"
                  },
                  "typeName": {
                    "baseType": {
                      "contractScope": null,
                      "id": 8914,
                      "name": "slice",
                      "nodeType": "UserDefinedTypeName",
                      "referencedDeclaration": 7338,
                      "src": "23053:5:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_slice_$7338_storage_ptr",
                        "typeString": "struct StringUtils.slice"
                      }
                    },
                    "id": 8915,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "23053:7:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_struct$_slice_$7338_storage_$dyn_storage_ptr",
                      "typeString": "struct StringUtils.slice[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "23033:41:35"
            },
            "payable": false,
            "returnParameters": {
              "id": 8920,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8919,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 9025,
                  "src": "23110:6:35",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 8918,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "23110:6:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "23109:15:35"
            },
            "scope": 9026,
            "src": "23020:656:35",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          }
        ],
        "scope": 9027,
        "src": "2109:21569:35"
      }
    ],
    "src": "1977:21702:35"
  },
  "legacyAST": {
    "absolutePath": "/Users/chtian/Documents/01_work/01_develope/jcc/jcc-solidity-utils/contracts/utils/StringUtils.sol",
    "exportedSymbols": {
      "StringUtils": [
        9026
      ]
    },
    "id": 9027,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 7333,
        "literals": [
          "solidity",
          ">=",
          "0.4",
          ".24"
        ],
        "nodeType": "PragmaDirective",
        "src": "1977:25:35"
      },
      {
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "library",
        "documentation": "@dev Utility library of string.\nsee also: https://github.com/Arachnid/solidity-stringutils",
        "fullyImplemented": true,
        "id": 9026,
        "linearizedBaseContracts": [
          9026
        ],
        "name": "StringUtils",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "canonicalName": "StringUtils.slice",
            "id": 7338,
            "members": [
              {
                "constant": false,
                "id": 7335,
                "name": "_len",
                "nodeType": "VariableDeclaration",
                "scope": 7338,
                "src": "2152:12:35",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 7334,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "2152:7:35",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 7337,
                "name": "_ptr",
                "nodeType": "VariableDeclaration",
                "scope": 7338,
                "src": "2170:12:35",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 7336,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "2170:7:35",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "slice",
            "nodeType": "StructDefinition",
            "scope": 9026,
            "src": "2133:54:35",
            "visibility": "public"
          },
          {
            "body": {
              "id": 7377,
              "nodeType": "Block",
              "src": "2276:410:35",
              "statements": [
                {
                  "body": {
                    "id": 7363,
                    "nodeType": "Block",
                    "src": "2357:100:35",
                    "statements": [
                      {
                        "externalReferences": [
                          {
                            "dest": {
                              "declaration": 7340,
                              "isOffset": false,
                              "isSlot": false,
                              "src": "2391:4:35",
                              "valueSize": 1
                            }
                          },
                          {
                            "src": {
                              "declaration": 7342,
                              "isOffset": false,
                              "isSlot": false,
                              "src": "2403:3:35",
                              "valueSize": 1
                            }
                          }
                        ],
                        "id": 7354,
                        "nodeType": "InlineAssembly",
                        "operations": "{\n    mstore(dest, mload(src))\n}",
                        "src": "2365:62:35"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 7357,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 7355,
                            "name": "dest",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7340,
                            "src": "2423:4:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "3332",
                            "id": 7356,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2431:2:35",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_32_by_1",
                              "typeString": "int_const 32"
                            },
                            "value": "32"
                          },
                          "src": "2423:10:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 7358,
                        "nodeType": "ExpressionStatement",
                        "src": "2423:10:35"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 7361,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 7359,
                            "name": "src",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7342,
                            "src": "2441:3:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "3332",
                            "id": 7360,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2448:2:35",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_32_by_1",
                              "typeString": "int_const 32"
                            },
                            "value": "32"
                          },
                          "src": "2441:9:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 7362,
                        "nodeType": "ExpressionStatement",
                        "src": "2441:9:35"
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 7349,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 7347,
                      "name": "len",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7344,
                      "src": "2335:3:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "3332",
                      "id": 7348,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2342:2:35",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_32_by_1",
                        "typeString": "int_const 32"
                      },
                      "value": "32"
                    },
                    "src": "2335:9:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 7364,
                  "initializationExpression": null,
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 7352,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftHandSide": {
                        "argumentTypes": null,
                        "id": 7350,
                        "name": "len",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7344,
                        "src": "2346:3:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "Assignment",
                      "operator": "-=",
                      "rightHandSide": {
                        "argumentTypes": null,
                        "hexValue": "3332",
                        "id": 7351,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2353:2:35",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_32_by_1",
                          "typeString": "int_const 32"
                        },
                        "value": "32"
                      },
                      "src": "2346:9:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 7353,
                    "nodeType": "ExpressionStatement",
                    "src": "2346:9:35"
                  },
                  "nodeType": "ForStatement",
                  "src": "2328:129:35"
                },
                {
                  "assignments": [
                    7366
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7366,
                      "name": "mask",
                      "nodeType": "VariableDeclaration",
                      "scope": 7378,
                      "src": "2491:12:35",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7365,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "2491:7:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7375,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 7374,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 7372,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "hexValue": "323536",
                        "id": 7367,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2506:3:35",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_256_by_1",
                          "typeString": "int_const 256"
                        },
                        "value": "256"
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "**",
                      "rightExpression": {
                        "argumentTypes": null,
                        "components": [
                          {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 7370,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "hexValue": "3332",
                              "id": 7368,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2512:2:35",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_32_by_1",
                                "typeString": "int_const 32"
                              },
                              "value": "32"
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "-",
                            "rightExpression": {
                              "argumentTypes": null,
                              "id": 7369,
                              "name": "len",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7344,
                              "src": "2517:3:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "2512:8:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "id": 7371,
                        "isConstant": false,
                        "isInlineArray": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "TupleExpression",
                        "src": "2511:10:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "2506:15:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "-",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "31",
                      "id": 7373,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2524:1:35",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "src": "2506:19:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2491:34:35"
                },
                {
                  "externalReferences": [
                    {
                      "src": {
                        "declaration": 7342,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "2573:3:35",
                        "valueSize": 1
                      }
                    },
                    {
                      "mask": {
                        "declaration": 7366,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "2583:4:35",
                        "valueSize": 1
                      }
                    },
                    {
                      "dest": {
                        "declaration": 7340,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "2622:4:35",
                        "valueSize": 1
                      }
                    },
                    {
                      "mask": {
                        "declaration": 7366,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "2629:4:35",
                        "valueSize": 1
                      }
                    },
                    {
                      "dest": {
                        "declaration": 7340,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "2648:4:35",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 7376,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    let srcpart := and(mload(src), not(mask))\n    let destpart := and(mload(dest), mask)\n    mstore(dest, or(destpart, srcpart))\n}",
                  "src": "2531:155:35"
                }
              ]
            },
            "documentation": null,
            "id": 7378,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "memcpy",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7345,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7340,
                  "name": "dest",
                  "nodeType": "VariableDeclaration",
                  "scope": 7378,
                  "src": "2212:12:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7339,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2212:7:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7342,
                  "name": "src",
                  "nodeType": "VariableDeclaration",
                  "scope": 7378,
                  "src": "2230:11:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7341,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2230:7:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7344,
                  "name": "len",
                  "nodeType": "VariableDeclaration",
                  "scope": 7378,
                  "src": "2247:11:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7343,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2247:7:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2206:56:35"
            },
            "payable": false,
            "returnParameters": {
              "id": 7346,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2276:0:35"
            },
            "scope": 9026,
            "src": "2191:495:35",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "private"
          },
          {
            "body": {
              "id": 7397,
              "nodeType": "Block",
              "src": "2948:115:35",
              "statements": [
                {
                  "assignments": [],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7386,
                      "name": "ptr",
                      "nodeType": "VariableDeclaration",
                      "scope": 7398,
                      "src": "2954:11:35",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7385,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "2954:7:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7387,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2954:11:35"
                },
                {
                  "externalReferences": [
                    {
                      "ptr": {
                        "declaration": 7386,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "2988:3:35",
                        "valueSize": 1
                      }
                    },
                    {
                      "self": {
                        "declaration": 7380,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "2999:4:35",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 7388,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    ptr := add(self, 0x20)\n}",
                  "src": "2971:56:35"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 7391,
                              "name": "self",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7380,
                              "src": "3040:4:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            ],
                            "id": 7390,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "3034:5:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                              "typeString": "type(bytes storage pointer)"
                            },
                            "typeName": "bytes"
                          },
                          "id": 7392,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3034:11:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory",
                            "typeString": "bytes memory"
                          }
                        },
                        "id": 7393,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "length",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "3034:18:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7394,
                        "name": "ptr",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7386,
                        "src": "3054:3:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 7389,
                      "name": "slice",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7338,
                      "src": "3028:5:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_struct$_slice_$7338_storage_ptr_$",
                        "typeString": "type(struct StringUtils.slice storage pointer)"
                      }
                    },
                    "id": 7395,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "structConstructorCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3028:30:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$7338_memory",
                      "typeString": "struct StringUtils.slice memory"
                    }
                  },
                  "functionReturnParameters": 7384,
                  "id": 7396,
                  "nodeType": "Return",
                  "src": "3021:37:35"
                }
              ]
            },
            "documentation": null,
            "id": 7398,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "toSlice",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7381,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7380,
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 7398,
                  "src": "2891:18:35",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 7379,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "2891:6:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2890:20:35"
            },
            "payable": false,
            "returnParameters": {
              "id": 7384,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7383,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 7398,
                  "src": "2934:5:35",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                    "typeString": "struct StringUtils.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 7382,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7338,
                    "src": "2934:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$7338_storage_ptr",
                      "typeString": "struct StringUtils.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2933:14:35"
            },
            "scope": 9026,
            "src": "2874:189:35",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 7513,
              "nodeType": "Block",
              "src": "3306:607:35",
              "statements": [
                {
                  "assignments": [],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7406,
                      "name": "ret",
                      "nodeType": "VariableDeclaration",
                      "scope": 7514,
                      "src": "3312:11:35",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7405,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "3312:7:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7407,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3312:11:35"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    },
                    "id": 7410,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 7408,
                      "name": "self",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7400,
                      "src": "3333:4:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 7409,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3341:1:35",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "3333:9:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 7413,
                  "nodeType": "IfStatement",
                  "src": "3329:23:35",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 7411,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3351:1:35",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "functionReturnParameters": 7404,
                    "id": 7412,
                    "nodeType": "Return",
                    "src": "3344:8:35"
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    },
                    "id": 7418,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "id": 7416,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 7414,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7400,
                        "src": "3362:4:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "&",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "30786666666666666666666666666666666666666666666666666666666666666666",
                        "id": 7415,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3369:34:35",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_340282366920938463463374607431768211455_by_1",
                          "typeString": "int_const 3402...(31 digits omitted)...1455"
                        },
                        "value": "0xffffffffffffffffffffffffffffffff"
                      },
                      "src": "3362:41:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 7417,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3407:1:35",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "3362:46:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 7434,
                  "nodeType": "IfStatement",
                  "src": "3358:151:35",
                  "trueBody": {
                    "id": 7433,
                    "nodeType": "Block",
                    "src": "3410:99:35",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 7421,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 7419,
                            "name": "ret",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7406,
                            "src": "3418:3:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "3136",
                            "id": 7420,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "3425:2:35",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_16_by_1",
                              "typeString": "int_const 16"
                            },
                            "value": "16"
                          },
                          "src": "3418:9:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 7422,
                        "nodeType": "ExpressionStatement",
                        "src": "3418:9:35"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 7431,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 7423,
                            "name": "self",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7400,
                            "src": "3435:4:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 7429,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 7426,
                                      "name": "self",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 7400,
                                      "src": "3458:4:35",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      }
                                    ],
                                    "id": 7425,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "3450:7:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_uint256_$",
                                      "typeString": "type(uint256)"
                                    },
                                    "typeName": "uint256"
                                  },
                                  "id": 7427,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "3450:13:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "/",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "hexValue": "3078313030303030303030303030303030303030303030303030303030303030303030",
                                  "id": 7428,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "3466:35:35",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_340282366920938463463374607431768211456_by_1",
                                    "typeString": "int_const 3402...(31 digits omitted)...1456"
                                  },
                                  "value": "0x100000000000000000000000000000000"
                                },
                                "src": "3450:51:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 7424,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "3442:7:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_bytes32_$",
                                "typeString": "type(bytes32)"
                              },
                              "typeName": "bytes32"
                            },
                            "id": 7430,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3442:60:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "3435:67:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 7432,
                        "nodeType": "ExpressionStatement",
                        "src": "3435:67:35"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    },
                    "id": 7439,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "id": 7437,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 7435,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7400,
                        "src": "3518:4:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "&",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "307866666666666666666666666666666666",
                        "id": 7436,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3525:18:35",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_18446744073709551615_by_1",
                          "typeString": "int_const 18446744073709551615"
                        },
                        "value": "0xffffffffffffffff"
                      },
                      "src": "3518:25:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 7438,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3547:1:35",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "3518:30:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 7455,
                  "nodeType": "IfStatement",
                  "src": "3514:118:35",
                  "trueBody": {
                    "id": 7454,
                    "nodeType": "Block",
                    "src": "3550:82:35",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 7442,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 7440,
                            "name": "ret",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7406,
                            "src": "3558:3:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "38",
                            "id": 7441,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "3565:1:35",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_8_by_1",
                              "typeString": "int_const 8"
                            },
                            "value": "8"
                          },
                          "src": "3558:8:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 7443,
                        "nodeType": "ExpressionStatement",
                        "src": "3558:8:35"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 7452,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 7444,
                            "name": "self",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7400,
                            "src": "3574:4:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 7450,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 7447,
                                      "name": "self",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 7400,
                                      "src": "3597:4:35",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      }
                                    ],
                                    "id": 7446,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "3589:7:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_uint256_$",
                                      "typeString": "type(uint256)"
                                    },
                                    "typeName": "uint256"
                                  },
                                  "id": 7448,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "3589:13:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "/",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "hexValue": "30783130303030303030303030303030303030",
                                  "id": 7449,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "3605:19:35",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_18446744073709551616_by_1",
                                    "typeString": "int_const 18446744073709551616"
                                  },
                                  "value": "0x10000000000000000"
                                },
                                "src": "3589:35:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 7445,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "3581:7:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_bytes32_$",
                                "typeString": "type(bytes32)"
                              },
                              "typeName": "bytes32"
                            },
                            "id": 7451,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3581:44:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "3574:51:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 7453,
                        "nodeType": "ExpressionStatement",
                        "src": "3574:51:35"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    },
                    "id": 7460,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "id": 7458,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 7456,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7400,
                        "src": "3641:4:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "&",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "30786666666666666666",
                        "id": 7457,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3648:10:35",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_4294967295_by_1",
                          "typeString": "int_const 4294967295"
                        },
                        "value": "0xffffffff"
                      },
                      "src": "3641:17:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 7459,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3662:1:35",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "3641:22:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 7476,
                  "nodeType": "IfStatement",
                  "src": "3637:102:35",
                  "trueBody": {
                    "id": 7475,
                    "nodeType": "Block",
                    "src": "3665:74:35",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 7463,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 7461,
                            "name": "ret",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7406,
                            "src": "3673:3:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "34",
                            "id": 7462,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "3680:1:35",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_4_by_1",
                              "typeString": "int_const 4"
                            },
                            "value": "4"
                          },
                          "src": "3673:8:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 7464,
                        "nodeType": "ExpressionStatement",
                        "src": "3673:8:35"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 7473,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 7465,
                            "name": "self",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7400,
                            "src": "3689:4:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 7471,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 7468,
                                      "name": "self",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 7400,
                                      "src": "3712:4:35",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      }
                                    ],
                                    "id": 7467,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "3704:7:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_uint256_$",
                                      "typeString": "type(uint256)"
                                    },
                                    "typeName": "uint256"
                                  },
                                  "id": 7469,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "3704:13:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "/",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "hexValue": "3078313030303030303030",
                                  "id": 7470,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "3720:11:35",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_4294967296_by_1",
                                    "typeString": "int_const 4294967296"
                                  },
                                  "value": "0x100000000"
                                },
                                "src": "3704:27:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 7466,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "3696:7:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_bytes32_$",
                                "typeString": "type(bytes32)"
                              },
                              "typeName": "bytes32"
                            },
                            "id": 7472,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3696:36:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "3689:43:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 7474,
                        "nodeType": "ExpressionStatement",
                        "src": "3689:43:35"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    },
                    "id": 7481,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "id": 7479,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 7477,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7400,
                        "src": "3748:4:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "&",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "307866666666",
                        "id": 7478,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3755:6:35",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_65535_by_1",
                          "typeString": "int_const 65535"
                        },
                        "value": "0xffff"
                      },
                      "src": "3748:13:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 7480,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3765:1:35",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "3748:18:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 7497,
                  "nodeType": "IfStatement",
                  "src": "3744:94:35",
                  "trueBody": {
                    "id": 7496,
                    "nodeType": "Block",
                    "src": "3768:70:35",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 7484,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 7482,
                            "name": "ret",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7406,
                            "src": "3776:3:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "32",
                            "id": 7483,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "3783:1:35",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_2_by_1",
                              "typeString": "int_const 2"
                            },
                            "value": "2"
                          },
                          "src": "3776:8:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 7485,
                        "nodeType": "ExpressionStatement",
                        "src": "3776:8:35"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 7494,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 7486,
                            "name": "self",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7400,
                            "src": "3792:4:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 7492,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 7489,
                                      "name": "self",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 7400,
                                      "src": "3815:4:35",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      }
                                    ],
                                    "id": 7488,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "3807:7:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_uint256_$",
                                      "typeString": "type(uint256)"
                                    },
                                    "typeName": "uint256"
                                  },
                                  "id": 7490,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "3807:13:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "/",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "hexValue": "30783130303030",
                                  "id": 7491,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "3823:7:35",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_65536_by_1",
                                    "typeString": "int_const 65536"
                                  },
                                  "value": "0x10000"
                                },
                                "src": "3807:23:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 7487,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "3799:7:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_bytes32_$",
                                "typeString": "type(bytes32)"
                              },
                              "typeName": "bytes32"
                            },
                            "id": 7493,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3799:32:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "3792:39:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 7495,
                        "nodeType": "ExpressionStatement",
                        "src": "3792:39:35"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    },
                    "id": 7502,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "id": 7500,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 7498,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7400,
                        "src": "3847:4:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "&",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "30786666",
                        "id": 7499,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3854:4:35",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_255_by_1",
                          "typeString": "int_const 255"
                        },
                        "value": "0xff"
                      },
                      "src": "3847:11:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 7501,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3862:1:35",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "3847:16:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 7508,
                  "nodeType": "IfStatement",
                  "src": "3843:45:35",
                  "trueBody": {
                    "id": 7507,
                    "nodeType": "Block",
                    "src": "3865:23:35",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 7505,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 7503,
                            "name": "ret",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7406,
                            "src": "3873:3:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "31",
                            "id": 7504,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "3880:1:35",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "src": "3873:8:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 7506,
                        "nodeType": "ExpressionStatement",
                        "src": "3873:8:35"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 7511,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "hexValue": "3332",
                      "id": 7509,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3900:2:35",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_32_by_1",
                        "typeString": "int_const 32"
                      },
                      "value": "32"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "-",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 7510,
                      "name": "ret",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7406,
                      "src": "3905:3:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3900:8:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 7404,
                  "id": 7512,
                  "nodeType": "Return",
                  "src": "3893:15:35"
                }
              ]
            },
            "documentation": null,
            "id": 7514,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "len",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7401,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7400,
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 7514,
                  "src": "3260:12:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 7399,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3260:7:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3259:14:35"
            },
            "payable": false,
            "returnParameters": {
              "id": 7404,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7403,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 7514,
                  "src": "3297:7:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7402,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3297:7:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3296:9:35"
            },
            "scope": 9026,
            "src": "3247:666:35",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 7530,
              "nodeType": "Block",
              "src": "4278:253:35",
              "statements": [
                {
                  "externalReferences": [
                    {
                      "ret": {
                        "declaration": 7519,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "4479:3:35",
                        "valueSize": 1
                      }
                    },
                    {
                      "self": {
                        "declaration": 7516,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "4456:4:35",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 7521,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    let ptr := mload(0x40)\n    mstore(0x40, add(ptr, 0x20))\n    mstore(ptr, self)\n    mstore(add(ret, 0x20), ptr)\n}",
                  "src": "4363:146:35"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7528,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 7522,
                        "name": "ret",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7519,
                        "src": "4506:3:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                          "typeString": "struct StringUtils.slice memory"
                        }
                      },
                      "id": 7524,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7335,
                      "src": "4506:8:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 7526,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7516,
                          "src": "4521:4:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        ],
                        "id": 7525,
                        "name": "len",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [
                          7514,
                          7664
                        ],
                        "referencedDeclaration": 7514,
                        "src": "4517:3:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_bytes32_$returns$_t_uint256_$",
                          "typeString": "function (bytes32) pure returns (uint256)"
                        }
                      },
                      "id": 7527,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4517:9:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "4506:20:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 7529,
                  "nodeType": "ExpressionStatement",
                  "src": "4506:20:35"
                }
              ]
            },
            "documentation": null,
            "id": 7531,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "toSliceB32",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7517,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7516,
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 7531,
                  "src": "4223:12:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 7515,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "4223:7:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4222:14:35"
            },
            "payable": false,
            "returnParameters": {
              "id": 7520,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7519,
                  "name": "ret",
                  "nodeType": "VariableDeclaration",
                  "scope": 7531,
                  "src": "4260:16:35",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                    "typeString": "struct StringUtils.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 7518,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7338,
                    "src": "4260:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$7338_storage_ptr",
                      "typeString": "struct StringUtils.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4259:18:35"
            },
            "scope": 9026,
            "src": "4203:328:35",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 7545,
              "nodeType": "Block",
              "src": "4790:45:35",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 7539,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7533,
                          "src": "4809:4:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                            "typeString": "struct StringUtils.slice memory"
                          }
                        },
                        "id": 7540,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7335,
                        "src": "4809:9:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 7541,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7533,
                          "src": "4820:4:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                            "typeString": "struct StringUtils.slice memory"
                          }
                        },
                        "id": 7542,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_ptr",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7337,
                        "src": "4820:9:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 7538,
                      "name": "slice",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7338,
                      "src": "4803:5:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_struct$_slice_$7338_storage_ptr_$",
                        "typeString": "type(struct StringUtils.slice storage pointer)"
                      }
                    },
                    "id": 7543,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "structConstructorCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4803:27:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$7338_memory",
                      "typeString": "struct StringUtils.slice memory"
                    }
                  },
                  "functionReturnParameters": 7537,
                  "id": 7544,
                  "nodeType": "Return",
                  "src": "4796:34:35"
                }
              ]
            },
            "documentation": null,
            "id": 7546,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "copy",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7534,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7533,
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 7546,
                  "src": "4734:17:35",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                    "typeString": "struct StringUtils.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 7532,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7338,
                    "src": "4734:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$7338_storage_ptr",
                      "typeString": "struct StringUtils.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4733:19:35"
            },
            "payable": false,
            "returnParameters": {
              "id": 7537,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7536,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 7546,
                  "src": "4776:5:35",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                    "typeString": "struct StringUtils.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 7535,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7338,
                    "src": "4776:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$7338_storage_ptr",
                      "typeString": "struct StringUtils.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4775:14:35"
            },
            "scope": 9026,
            "src": "4720:115:35",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 7575,
              "nodeType": "Block",
              "src": "5070:181:35",
              "statements": [
                {
                  "assignments": [
                    7554
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7554,
                      "name": "ret",
                      "nodeType": "VariableDeclaration",
                      "scope": 7576,
                      "src": "5076:17:35",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string"
                      },
                      "typeName": {
                        "id": 7553,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "5076:6:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage_ptr",
                          "typeString": "string"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7560,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 7557,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7548,
                          "src": "5107:4:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                            "typeString": "struct StringUtils.slice memory"
                          }
                        },
                        "id": 7558,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7335,
                        "src": "5107:9:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 7556,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "5096:10:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_string_memory_$",
                        "typeString": "function (uint256) pure returns (string memory)"
                      },
                      "typeName": {
                        "id": 7555,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "5100:6:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage_ptr",
                          "typeString": "string"
                        }
                      }
                    },
                    "id": 7559,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5096:21:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_memory",
                      "typeString": "string memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5076:41:35"
                },
                {
                  "assignments": [],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7562,
                      "name": "retptr",
                      "nodeType": "VariableDeclaration",
                      "scope": 7576,
                      "src": "5123:14:35",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7561,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "5123:7:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7563,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5123:14:35"
                },
                {
                  "externalReferences": [
                    {
                      "retptr": {
                        "declaration": 7562,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "5160:6:35",
                        "valueSize": 1
                      }
                    },
                    {
                      "ret": {
                        "declaration": 7554,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "5174:3:35",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 7564,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    retptr := add(ret, 32)\n}",
                  "src": "5143:57:35"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7566,
                        "name": "retptr",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7562,
                        "src": "5201:6:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 7567,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7548,
                          "src": "5209:4:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                            "typeString": "struct StringUtils.slice memory"
                          }
                        },
                        "id": 7568,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_ptr",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7337,
                        "src": "5209:9:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 7569,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7548,
                          "src": "5220:4:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                            "typeString": "struct StringUtils.slice memory"
                          }
                        },
                        "id": 7570,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7335,
                        "src": "5220:9:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 7565,
                      "name": "memcpy",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7378,
                      "src": "5194:6:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (uint256,uint256,uint256) pure"
                      }
                    },
                    "id": 7571,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5194:36:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7572,
                  "nodeType": "ExpressionStatement",
                  "src": "5194:36:35"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7573,
                    "name": "ret",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 7554,
                    "src": "5243:3:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_memory_ptr",
                      "typeString": "string memory"
                    }
                  },
                  "functionReturnParameters": 7552,
                  "id": 7574,
                  "nodeType": "Return",
                  "src": "5236:10:35"
                }
              ]
            },
            "documentation": null,
            "id": 7576,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "toString",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7549,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7548,
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 7576,
                  "src": "5013:17:35",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                    "typeString": "struct StringUtils.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 7547,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7338,
                    "src": "5013:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$7338_storage_ptr",
                      "typeString": "struct StringUtils.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5012:19:35"
            },
            "payable": false,
            "returnParameters": {
              "id": 7552,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7551,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 7576,
                  "src": "5055:6:35",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 7550,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "5055:6:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5054:15:35"
            },
            "scope": 9026,
            "src": "4995:256:35",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 7663,
              "nodeType": "Block",
              "src": "5690:529:35",
              "statements": [
                {
                  "assignments": [
                    7584
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7584,
                      "name": "ptr",
                      "nodeType": "VariableDeclaration",
                      "scope": 7664,
                      "src": "5767:11:35",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7583,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "5767:7:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7589,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 7588,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 7585,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7578,
                        "src": "5781:4:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                          "typeString": "struct StringUtils.slice memory"
                        }
                      },
                      "id": 7586,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_ptr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7337,
                      "src": "5781:9:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "-",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "3331",
                      "id": 7587,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "5793:2:35",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_31_by_1",
                        "typeString": "int_const 31"
                      },
                      "value": "31"
                    },
                    "src": "5781:14:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5767:28:35"
                },
                {
                  "assignments": [
                    7591
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7591,
                      "name": "end",
                      "nodeType": "VariableDeclaration",
                      "scope": 7664,
                      "src": "5801:11:35",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7590,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "5801:7:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7596,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 7595,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 7592,
                      "name": "ptr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7584,
                      "src": "5815:3:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "+",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 7593,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7578,
                        "src": "5821:4:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                          "typeString": "struct StringUtils.slice memory"
                        }
                      },
                      "id": 7594,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7335,
                      "src": "5821:9:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "5815:15:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5801:29:35"
                },
                {
                  "body": {
                    "id": 7661,
                    "nodeType": "Block",
                    "src": "5864:351:35",
                    "statements": [
                      {
                        "assignments": [],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 7608,
                            "name": "b",
                            "nodeType": "VariableDeclaration",
                            "scope": 7664,
                            "src": "5872:7:35",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            },
                            "typeName": {
                              "id": 7607,
                              "name": "uint8",
                              "nodeType": "ElementaryTypeName",
                              "src": "5872:5:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 7609,
                        "initialValue": null,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "5872:7:35"
                      },
                      {
                        "externalReferences": [
                          {
                            "ptr": {
                              "declaration": 7584,
                              "isOffset": false,
                              "isSlot": false,
                              "src": "5921:3:35",
                              "valueSize": 1
                            }
                          },
                          {
                            "b": {
                              "declaration": 7608,
                              "isOffset": false,
                              "isSlot": false,
                              "src": "5906:1:35",
                              "valueSize": 1
                            }
                          }
                        ],
                        "id": 7610,
                        "nodeType": "InlineAssembly",
                        "operations": "{\n    b := and(mload(ptr), 0xFF)\n}",
                        "src": "5887:62:35"
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          },
                          "id": 7613,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 7611,
                            "name": "b",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7608,
                            "src": "5951:1:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30783830",
                            "id": 7612,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "5955:4:35",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_128_by_1",
                              "typeString": "int_const 128"
                            },
                            "value": "0x80"
                          },
                          "src": "5951:8:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "condition": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            },
                            "id": 7621,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "id": 7619,
                              "name": "b",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7608,
                              "src": "5998:1:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "<",
                            "rightExpression": {
                              "argumentTypes": null,
                              "hexValue": "30784530",
                              "id": 7620,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "6002:4:35",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_224_by_1",
                                "typeString": "int_const 224"
                              },
                              "value": "0xE0"
                            },
                            "src": "5998:8:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "falseBody": {
                            "condition": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              },
                              "id": 7629,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 7627,
                                "name": "b",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7608,
                                "src": "6045:1:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "<",
                              "rightExpression": {
                                "argumentTypes": null,
                                "hexValue": "30784630",
                                "id": 7628,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "6049:4:35",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_240_by_1",
                                  "typeString": "int_const 240"
                                },
                                "value": "0xF0"
                              },
                              "src": "6045:8:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "falseBody": {
                              "condition": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                },
                                "id": 7637,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "id": 7635,
                                  "name": "b",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7608,
                                  "src": "6092:1:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "<",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "hexValue": "30784638",
                                  "id": 7636,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "6096:4:35",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_248_by_1",
                                    "typeString": "int_const 248"
                                  },
                                  "value": "0xF8"
                                },
                                "src": "6092:8:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "falseBody": {
                                "condition": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  },
                                  "id": 7645,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "id": 7643,
                                    "name": "b",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7608,
                                    "src": "6139:1:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint8",
                                      "typeString": "uint8"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "<",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "hexValue": "30784643",
                                    "id": 7644,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "6143:4:35",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_252_by_1",
                                      "typeString": "int_const 252"
                                    },
                                    "value": "0xFC"
                                  },
                                  "src": "6139:8:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "falseBody": {
                                  "id": 7655,
                                  "nodeType": "Block",
                                  "src": "6182:27:35",
                                  "statements": [
                                    {
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 7653,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                          "argumentTypes": null,
                                          "id": 7651,
                                          "name": "ptr",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 7584,
                                          "src": "6192:3:35",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "+=",
                                        "rightHandSide": {
                                          "argumentTypes": null,
                                          "hexValue": "36",
                                          "id": 7652,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "kind": "number",
                                          "lValueRequested": false,
                                          "nodeType": "Literal",
                                          "src": "6199:1:35",
                                          "subdenomination": null,
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_rational_6_by_1",
                                            "typeString": "int_const 6"
                                          },
                                          "value": "6"
                                        },
                                        "src": "6192:8:35",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "id": 7654,
                                      "nodeType": "ExpressionStatement",
                                      "src": "6192:8:35"
                                    }
                                  ]
                                },
                                "id": 7656,
                                "nodeType": "IfStatement",
                                "src": "6135:74:35",
                                "trueBody": {
                                  "id": 7650,
                                  "nodeType": "Block",
                                  "src": "6149:27:35",
                                  "statements": [
                                    {
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 7648,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                          "argumentTypes": null,
                                          "id": 7646,
                                          "name": "ptr",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 7584,
                                          "src": "6159:3:35",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "+=",
                                        "rightHandSide": {
                                          "argumentTypes": null,
                                          "hexValue": "35",
                                          "id": 7647,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "kind": "number",
                                          "lValueRequested": false,
                                          "nodeType": "Literal",
                                          "src": "6166:1:35",
                                          "subdenomination": null,
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_rational_5_by_1",
                                            "typeString": "int_const 5"
                                          },
                                          "value": "5"
                                        },
                                        "src": "6159:8:35",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "id": 7649,
                                      "nodeType": "ExpressionStatement",
                                      "src": "6159:8:35"
                                    }
                                  ]
                                }
                              },
                              "id": 7657,
                              "nodeType": "IfStatement",
                              "src": "6088:121:35",
                              "trueBody": {
                                "id": 7642,
                                "nodeType": "Block",
                                "src": "6102:27:35",
                                "statements": [
                                  {
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 7640,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "argumentTypes": null,
                                        "id": 7638,
                                        "name": "ptr",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 7584,
                                        "src": "6112:3:35",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "+=",
                                      "rightHandSide": {
                                        "argumentTypes": null,
                                        "hexValue": "34",
                                        "id": 7639,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "6119:1:35",
                                        "subdenomination": null,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_4_by_1",
                                          "typeString": "int_const 4"
                                        },
                                        "value": "4"
                                      },
                                      "src": "6112:8:35",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 7641,
                                    "nodeType": "ExpressionStatement",
                                    "src": "6112:8:35"
                                  }
                                ]
                              }
                            },
                            "id": 7658,
                            "nodeType": "IfStatement",
                            "src": "6041:168:35",
                            "trueBody": {
                              "id": 7634,
                              "nodeType": "Block",
                              "src": "6055:27:35",
                              "statements": [
                                {
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 7632,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "argumentTypes": null,
                                      "id": 7630,
                                      "name": "ptr",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 7584,
                                      "src": "6065:3:35",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "+=",
                                    "rightHandSide": {
                                      "argumentTypes": null,
                                      "hexValue": "33",
                                      "id": 7631,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "6072:1:35",
                                      "subdenomination": null,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_3_by_1",
                                        "typeString": "int_const 3"
                                      },
                                      "value": "3"
                                    },
                                    "src": "6065:8:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 7633,
                                  "nodeType": "ExpressionStatement",
                                  "src": "6065:8:35"
                                }
                              ]
                            }
                          },
                          "id": 7659,
                          "nodeType": "IfStatement",
                          "src": "5994:215:35",
                          "trueBody": {
                            "id": 7626,
                            "nodeType": "Block",
                            "src": "6008:27:35",
                            "statements": [
                              {
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 7624,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftHandSide": {
                                    "argumentTypes": null,
                                    "id": 7622,
                                    "name": "ptr",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7584,
                                    "src": "6018:3:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "Assignment",
                                  "operator": "+=",
                                  "rightHandSide": {
                                    "argumentTypes": null,
                                    "hexValue": "32",
                                    "id": 7623,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "6025:1:35",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_2_by_1",
                                      "typeString": "int_const 2"
                                    },
                                    "value": "2"
                                  },
                                  "src": "6018:8:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 7625,
                                "nodeType": "ExpressionStatement",
                                "src": "6018:8:35"
                              }
                            ]
                          }
                        },
                        "id": 7660,
                        "nodeType": "IfStatement",
                        "src": "5947:262:35",
                        "trueBody": {
                          "id": 7618,
                          "nodeType": "Block",
                          "src": "5961:27:35",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 7616,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 7614,
                                  "name": "ptr",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7584,
                                  "src": "5971:3:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "+=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "hexValue": "31",
                                  "id": 7615,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "5978:1:35",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_1_by_1",
                                    "typeString": "int_const 1"
                                  },
                                  "value": "1"
                                },
                                "src": "5971:8:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 7617,
                              "nodeType": "ExpressionStatement",
                              "src": "5971:8:35"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 7603,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 7601,
                      "name": "ptr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7584,
                      "src": "5848:3:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 7602,
                      "name": "end",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7591,
                      "src": "5854:3:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "5848:9:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 7662,
                  "initializationExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 7599,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftHandSide": {
                        "argumentTypes": null,
                        "id": 7597,
                        "name": "l",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7581,
                        "src": "5841:1:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "Assignment",
                      "operator": "=",
                      "rightHandSide": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 7598,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "5845:1:35",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "5841:5:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 7600,
                    "nodeType": "ExpressionStatement",
                    "src": "5841:5:35"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 7605,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "5859:3:35",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 7604,
                        "name": "l",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7581,
                        "src": "5859:1:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 7606,
                    "nodeType": "ExpressionStatement",
                    "src": "5859:3:35"
                  },
                  "nodeType": "ForStatement",
                  "src": "5836:379:35"
                }
              ]
            },
            "documentation": null,
            "id": 7664,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "len",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7579,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7578,
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 7664,
                  "src": "5637:17:35",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                    "typeString": "struct StringUtils.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 7577,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7338,
                    "src": "5637:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$7338_storage_ptr",
                      "typeString": "struct StringUtils.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5636:19:35"
            },
            "payable": false,
            "returnParameters": {
              "id": 7582,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7581,
                  "name": "l",
                  "nodeType": "VariableDeclaration",
                  "scope": 7664,
                  "src": "5679:9:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7580,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5679:7:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5678:11:35"
            },
            "scope": 9026,
            "src": "5624:595:35",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 7676,
              "nodeType": "Block",
              "src": "6463:32:35",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 7674,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 7671,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7666,
                        "src": "6476:4:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                          "typeString": "struct StringUtils.slice memory"
                        }
                      },
                      "id": 7672,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7335,
                      "src": "6476:9:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 7673,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "6489:1:35",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "6476:14:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 7670,
                  "id": 7675,
                  "nodeType": "Return",
                  "src": "6469:21:35"
                }
              ]
            },
            "documentation": null,
            "id": 7677,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "empty",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7667,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7666,
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 7677,
                  "src": "6415:17:35",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                    "typeString": "struct StringUtils.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 7665,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7338,
                    "src": "6415:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$7338_storage_ptr",
                      "typeString": "struct StringUtils.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6414:19:35"
            },
            "payable": false,
            "returnParameters": {
              "id": 7670,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7669,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 7677,
                  "src": "6457:4:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 7668,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "6457:4:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6456:6:35"
            },
            "scope": 9026,
            "src": "6400:95:35",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 7805,
              "nodeType": "Block",
              "src": "7004:751:35",
              "statements": [
                {
                  "assignments": [
                    7687
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7687,
                      "name": "shortest",
                      "nodeType": "VariableDeclaration",
                      "scope": 7806,
                      "src": "7010:16:35",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7686,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "7010:7:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7690,
                  "initialValue": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 7688,
                      "name": "self",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7679,
                      "src": "7029:4:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                        "typeString": "struct StringUtils.slice memory"
                      }
                    },
                    "id": 7689,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "_len",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 7335,
                    "src": "7029:9:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7010:28:35"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 7695,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 7691,
                        "name": "other",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7681,
                        "src": "7048:5:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                          "typeString": "struct StringUtils.slice memory"
                        }
                      },
                      "id": 7692,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7335,
                      "src": "7048:10:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 7693,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7679,
                        "src": "7061:4:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                          "typeString": "struct StringUtils.slice memory"
                        }
                      },
                      "id": 7694,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7335,
                      "src": "7061:9:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "7048:22:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 7701,
                  "nodeType": "IfStatement",
                  "src": "7044:49:35",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 7699,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftHandSide": {
                        "argumentTypes": null,
                        "id": 7696,
                        "name": "shortest",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7687,
                        "src": "7072:8:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "Assignment",
                      "operator": "=",
                      "rightHandSide": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 7697,
                          "name": "other",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7681,
                          "src": "7083:5:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                            "typeString": "struct StringUtils.slice memory"
                          }
                        },
                        "id": 7698,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7335,
                        "src": "7083:10:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "7072:21:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 7700,
                    "nodeType": "ExpressionStatement",
                    "src": "7072:21:35"
                  }
                },
                {
                  "assignments": [
                    7703
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7703,
                      "name": "selfptr",
                      "nodeType": "VariableDeclaration",
                      "scope": 7806,
                      "src": "7100:15:35",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7702,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "7100:7:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7706,
                  "initialValue": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 7704,
                      "name": "self",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7679,
                      "src": "7118:4:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                        "typeString": "struct StringUtils.slice memory"
                      }
                    },
                    "id": 7705,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "_ptr",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 7337,
                    "src": "7118:9:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7100:27:35"
                },
                {
                  "assignments": [
                    7708
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7708,
                      "name": "otherptr",
                      "nodeType": "VariableDeclaration",
                      "scope": 7806,
                      "src": "7133:16:35",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7707,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "7133:7:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7711,
                  "initialValue": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 7709,
                      "name": "other",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7681,
                      "src": "7152:5:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                        "typeString": "struct StringUtils.slice memory"
                      }
                    },
                    "id": 7710,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "_ptr",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 7337,
                    "src": "7152:10:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7133:29:35"
                },
                {
                  "body": {
                    "id": 7793,
                    "nodeType": "Block",
                    "src": "7217:483:35",
                    "statements": [
                      {
                        "assignments": [],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 7724,
                            "name": "a",
                            "nodeType": "VariableDeclaration",
                            "scope": 7806,
                            "src": "7225:9:35",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 7723,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "7225:7:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 7725,
                        "initialValue": null,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "7225:9:35"
                      },
                      {
                        "assignments": [],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 7727,
                            "name": "b",
                            "nodeType": "VariableDeclaration",
                            "scope": 7806,
                            "src": "7242:9:35",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 7726,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "7242:7:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 7728,
                        "initialValue": null,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "7242:9:35"
                      },
                      {
                        "externalReferences": [
                          {
                            "a": {
                              "declaration": 7724,
                              "isOffset": false,
                              "isSlot": false,
                              "src": "7278:1:35",
                              "valueSize": 1
                            }
                          },
                          {
                            "selfptr": {
                              "declaration": 7703,
                              "isOffset": false,
                              "isSlot": false,
                              "src": "7289:7:35",
                              "valueSize": 1
                            }
                          },
                          {
                            "b": {
                              "declaration": 7727,
                              "isOffset": false,
                              "isSlot": false,
                              "src": "7306:1:35",
                              "valueSize": 1
                            }
                          },
                          {
                            "otherptr": {
                              "declaration": 7708,
                              "isOffset": false,
                              "isSlot": false,
                              "src": "7317:8:35",
                              "valueSize": 1
                            }
                          }
                        ],
                        "id": 7729,
                        "nodeType": "InlineAssembly",
                        "operations": "{\n    a := mload(selfptr)\n    b := mload(otherptr)\n}",
                        "src": "7259:84:35"
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 7732,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 7730,
                            "name": "a",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7724,
                            "src": "7345:1:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 7731,
                            "name": "b",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7727,
                            "src": "7350:1:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "7345:6:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 7784,
                        "nodeType": "IfStatement",
                        "src": "7341:310:35",
                        "trueBody": {
                          "id": 7783,
                          "nodeType": "Block",
                          "src": "7353:298:35",
                          "statements": [
                            {
                              "assignments": [
                                7734
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 7734,
                                  "name": "mask",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 7806,
                                  "src": "7416:12:35",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "typeName": {
                                    "id": 7733,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "7416:7:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                }
                              ],
                              "id": 7739,
                              "initialValue": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 7737,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "UnaryOperation",
                                    "operator": "-",
                                    "prefix": true,
                                    "src": "7439:2:35",
                                    "subExpression": {
                                      "argumentTypes": null,
                                      "hexValue": "31",
                                      "id": 7736,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "7440:1:35",
                                      "subdenomination": null,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_1_by_1",
                                        "typeString": "int_const 1"
                                      },
                                      "value": "1"
                                    },
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_-1_by_1",
                                      "typeString": "int_const -1"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_-1_by_1",
                                      "typeString": "int_const -1"
                                    }
                                  ],
                                  "id": 7735,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "7431:7:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint256_$",
                                    "typeString": "type(uint256)"
                                  },
                                  "typeName": "uint256"
                                },
                                "id": 7738,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "7431:11:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "7416:26:35"
                            },
                            {
                              "condition": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 7742,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "id": 7740,
                                  "name": "shortest",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7687,
                                  "src": "7469:8:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "<",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "hexValue": "3332",
                                  "id": 7741,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "7480:2:35",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_32_by_1",
                                    "typeString": "int_const 32"
                                  },
                                  "value": "32"
                                },
                                "src": "7469:13:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "falseBody": null,
                              "id": 7762,
                              "nodeType": "IfStatement",
                              "src": "7465:86:35",
                              "trueBody": {
                                "id": 7761,
                                "nodeType": "Block",
                                "src": "7484:67:35",
                                "statements": [
                                  {
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 7759,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "argumentTypes": null,
                                        "id": 7743,
                                        "name": "mask",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 7734,
                                        "src": "7496:4:35",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "=",
                                      "rightHandSide": {
                                        "argumentTypes": null,
                                        "id": 7758,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "UnaryOperation",
                                        "operator": "~",
                                        "prefix": true,
                                        "src": "7503:37:35",
                                        "subExpression": {
                                          "argumentTypes": null,
                                          "components": [
                                            {
                                              "argumentTypes": null,
                                              "commonType": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              },
                                              "id": 7756,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "leftExpression": {
                                                "argumentTypes": null,
                                                "commonType": {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                },
                                                "id": 7754,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                  "argumentTypes": null,
                                                  "hexValue": "32",
                                                  "id": 7744,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": true,
                                                  "kind": "number",
                                                  "lValueRequested": false,
                                                  "nodeType": "Literal",
                                                  "src": "7505:1:35",
                                                  "subdenomination": null,
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_rational_2_by_1",
                                                    "typeString": "int_const 2"
                                                  },
                                                  "value": "2"
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "**",
                                                "rightExpression": {
                                                  "argumentTypes": null,
                                                  "components": [
                                                    {
                                                      "argumentTypes": null,
                                                      "commonType": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                      },
                                                      "id": 7752,
                                                      "isConstant": false,
                                                      "isLValue": false,
                                                      "isPure": false,
                                                      "lValueRequested": false,
                                                      "leftExpression": {
                                                        "argumentTypes": null,
                                                        "hexValue": "38",
                                                        "id": 7745,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "kind": "number",
                                                        "lValueRequested": false,
                                                        "nodeType": "Literal",
                                                        "src": "7509:1:35",
                                                        "subdenomination": null,
                                                        "typeDescriptions": {
                                                          "typeIdentifier": "t_rational_8_by_1",
                                                          "typeString": "int_const 8"
                                                        },
                                                        "value": "8"
                                                      },
                                                      "nodeType": "BinaryOperation",
                                                      "operator": "*",
                                                      "rightExpression": {
                                                        "argumentTypes": null,
                                                        "components": [
                                                          {
                                                            "argumentTypes": null,
                                                            "commonType": {
                                                              "typeIdentifier": "t_uint256",
                                                              "typeString": "uint256"
                                                            },
                                                            "id": 7750,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "leftExpression": {
                                                              "argumentTypes": null,
                                                              "commonType": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                              },
                                                              "id": 7748,
                                                              "isConstant": false,
                                                              "isLValue": false,
                                                              "isPure": false,
                                                              "lValueRequested": false,
                                                              "leftExpression": {
                                                                "argumentTypes": null,
                                                                "hexValue": "3332",
                                                                "id": 7746,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": true,
                                                                "kind": "number",
                                                                "lValueRequested": false,
                                                                "nodeType": "Literal",
                                                                "src": "7514:2:35",
                                                                "subdenomination": null,
                                                                "typeDescriptions": {
                                                                  "typeIdentifier": "t_rational_32_by_1",
                                                                  "typeString": "int_const 32"
                                                                },
                                                                "value": "32"
                                                              },
                                                              "nodeType": "BinaryOperation",
                                                              "operator": "-",
                                                              "rightExpression": {
                                                                "argumentTypes": null,
                                                                "id": 7747,
                                                                "name": "shortest",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 7687,
                                                                "src": "7519:8:35",
                                                                "typeDescriptions": {
                                                                  "typeIdentifier": "t_uint256",
                                                                  "typeString": "uint256"
                                                                }
                                                              },
                                                              "src": "7514:13:35",
                                                              "typeDescriptions": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                              }
                                                            },
                                                            "nodeType": "BinaryOperation",
                                                            "operator": "+",
                                                            "rightExpression": {
                                                              "argumentTypes": null,
                                                              "id": 7749,
                                                              "name": "idx",
                                                              "nodeType": "Identifier",
                                                              "overloadedDeclarations": [],
                                                              "referencedDeclaration": 7713,
                                                              "src": "7530:3:35",
                                                              "typeDescriptions": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                              }
                                                            },
                                                            "src": "7514:19:35",
                                                            "typeDescriptions": {
                                                              "typeIdentifier": "t_uint256",
                                                              "typeString": "uint256"
                                                            }
                                                          }
                                                        ],
                                                        "id": 7751,
                                                        "isConstant": false,
                                                        "isInlineArray": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "nodeType": "TupleExpression",
                                                        "src": "7513:21:35",
                                                        "typeDescriptions": {
                                                          "typeIdentifier": "t_uint256",
                                                          "typeString": "uint256"
                                                        }
                                                      },
                                                      "src": "7509:25:35",
                                                      "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                      }
                                                    }
                                                  ],
                                                  "id": 7753,
                                                  "isConstant": false,
                                                  "isInlineArray": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "lValueRequested": false,
                                                  "nodeType": "TupleExpression",
                                                  "src": "7508:27:35",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                  }
                                                },
                                                "src": "7505:30:35",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                }
                                              },
                                              "nodeType": "BinaryOperation",
                                              "operator": "-",
                                              "rightExpression": {
                                                "argumentTypes": null,
                                                "hexValue": "31",
                                                "id": 7755,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "number",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "7538:1:35",
                                                "subdenomination": null,
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_rational_1_by_1",
                                                  "typeString": "int_const 1"
                                                },
                                                "value": "1"
                                              },
                                              "src": "7505:34:35",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            }
                                          ],
                                          "id": 7757,
                                          "isConstant": false,
                                          "isInlineArray": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "nodeType": "TupleExpression",
                                          "src": "7504:36:35",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "7496:44:35",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 7760,
                                    "nodeType": "ExpressionStatement",
                                    "src": "7496:44:35"
                                  }
                                ]
                              }
                            },
                            {
                              "assignments": [
                                7764
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 7764,
                                  "name": "diff",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 7806,
                                  "src": "7560:12:35",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "typeName": {
                                    "id": 7763,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "7560:7:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                }
                              ],
                              "id": 7774,
                              "initialValue": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 7773,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "components": [
                                    {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 7767,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "argumentTypes": null,
                                        "id": 7765,
                                        "name": "a",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 7724,
                                        "src": "7576:1:35",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "&",
                                      "rightExpression": {
                                        "argumentTypes": null,
                                        "id": 7766,
                                        "name": "mask",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 7734,
                                        "src": "7580:4:35",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "7576:8:35",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "id": 7768,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "7575:10:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "-",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "components": [
                                    {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 7771,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "argumentTypes": null,
                                        "id": 7769,
                                        "name": "b",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 7727,
                                        "src": "7589:1:35",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "&",
                                      "rightExpression": {
                                        "argumentTypes": null,
                                        "id": 7770,
                                        "name": "mask",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 7734,
                                        "src": "7593:4:35",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "7589:8:35",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "id": 7772,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "7588:10:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "7575:23:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "7560:38:35"
                            },
                            {
                              "condition": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 7777,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "id": 7775,
                                  "name": "diff",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7764,
                                  "src": "7612:4:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "!=",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "hexValue": "30",
                                  "id": 7776,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "7620:1:35",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                },
                                "src": "7612:9:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "falseBody": null,
                              "id": 7782,
                              "nodeType": "IfStatement",
                              "src": "7608:34:35",
                              "trueBody": {
                                "expression": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 7779,
                                      "name": "diff",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 7764,
                                      "src": "7637:4:35",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "id": 7778,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "7630:6:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_int256_$",
                                      "typeString": "type(int256)"
                                    },
                                    "typeName": "int256"
                                  },
                                  "id": 7780,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "7630:12:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int256",
                                    "typeString": "int256"
                                  }
                                },
                                "functionReturnParameters": 7685,
                                "id": 7781,
                                "nodeType": "Return",
                                "src": "7623:19:35"
                              }
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 7787,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 7785,
                            "name": "selfptr",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7703,
                            "src": "7658:7:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "3332",
                            "id": 7786,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "7669:2:35",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_32_by_1",
                              "typeString": "int_const 32"
                            },
                            "value": "32"
                          },
                          "src": "7658:13:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 7788,
                        "nodeType": "ExpressionStatement",
                        "src": "7658:13:35"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 7791,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 7789,
                            "name": "otherptr",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7708,
                            "src": "7679:8:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "3332",
                            "id": 7790,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "7691:2:35",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_32_by_1",
                              "typeString": "int_const 32"
                            },
                            "value": "32"
                          },
                          "src": "7679:14:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 7792,
                        "nodeType": "ExpressionStatement",
                        "src": "7679:14:35"
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 7718,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 7716,
                      "name": "idx",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7713,
                      "src": "7190:3:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 7717,
                      "name": "shortest",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7687,
                      "src": "7196:8:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "7190:14:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 7794,
                  "initializationExpression": {
                    "assignments": [
                      7713
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 7713,
                        "name": "idx",
                        "nodeType": "VariableDeclaration",
                        "scope": 7806,
                        "src": "7173:11:35",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 7712,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "7173:7:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 7715,
                    "initialValue": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 7714,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "7187:1:35",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "7173:15:35"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 7721,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftHandSide": {
                        "argumentTypes": null,
                        "id": 7719,
                        "name": "idx",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7713,
                        "src": "7206:3:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "Assignment",
                      "operator": "+=",
                      "rightHandSide": {
                        "argumentTypes": null,
                        "hexValue": "3332",
                        "id": 7720,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7213:2:35",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_32_by_1",
                          "typeString": "int_const 32"
                        },
                        "value": "32"
                      },
                      "src": "7206:9:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 7722,
                    "nodeType": "ExpressionStatement",
                    "src": "7206:9:35"
                  },
                  "nodeType": "ForStatement",
                  "src": "7168:532:35"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    },
                    "id": 7803,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 7796,
                            "name": "self",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7679,
                            "src": "7719:4:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                              "typeString": "struct StringUtils.slice memory"
                            }
                          },
                          "id": 7797,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "_len",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 7335,
                          "src": "7719:9:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 7795,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "7712:6:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_int256_$",
                          "typeString": "type(int256)"
                        },
                        "typeName": "int256"
                      },
                      "id": 7798,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "7712:17:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_int256",
                        "typeString": "int256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "-",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 7800,
                            "name": "other",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7681,
                            "src": "7739:5:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                              "typeString": "struct StringUtils.slice memory"
                            }
                          },
                          "id": 7801,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "_len",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 7335,
                          "src": "7739:10:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 7799,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "7732:6:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_int256_$",
                          "typeString": "type(int256)"
                        },
                        "typeName": "int256"
                      },
                      "id": 7802,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "7732:18:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_int256",
                        "typeString": "int256"
                      }
                    },
                    "src": "7712:38:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    }
                  },
                  "functionReturnParameters": 7685,
                  "id": 7804,
                  "nodeType": "Return",
                  "src": "7705:45:35"
                }
              ]
            },
            "documentation": null,
            "id": 7806,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "compare",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7682,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7679,
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 7806,
                  "src": "6920:17:35",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                    "typeString": "struct StringUtils.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 7678,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7338,
                    "src": "6920:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$7338_storage_ptr",
                      "typeString": "struct StringUtils.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7681,
                  "name": "other",
                  "nodeType": "VariableDeclaration",
                  "scope": 7806,
                  "src": "6939:18:35",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                    "typeString": "struct StringUtils.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 7680,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7338,
                    "src": "6939:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$7338_storage_ptr",
                      "typeString": "struct StringUtils.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6919:39:35"
            },
            "payable": false,
            "returnParameters": {
              "id": 7685,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7684,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 7806,
                  "src": "6994:6:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_int256",
                    "typeString": "int256"
                  },
                  "typeName": {
                    "id": 7683,
                    "name": "int256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6994:6:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6993:8:35"
            },
            "scope": 9026,
            "src": "6903:852:35",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 7822,
              "nodeType": "Block",
              "src": "8083:43:35",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    },
                    "id": 7820,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 7816,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7808,
                          "src": "8104:4:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                            "typeString": "struct StringUtils.slice memory"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 7817,
                          "name": "other",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7810,
                          "src": "8110:5:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                            "typeString": "struct StringUtils.slice memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                            "typeString": "struct StringUtils.slice memory"
                          },
                          {
                            "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                            "typeString": "struct StringUtils.slice memory"
                          }
                        ],
                        "id": 7815,
                        "name": "compare",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7806,
                        "src": "8096:7:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_struct$_slice_$7338_memory_ptr_$_t_struct$_slice_$7338_memory_ptr_$returns$_t_int256_$",
                          "typeString": "function (struct StringUtils.slice memory,struct StringUtils.slice memory) pure returns (int256)"
                        }
                      },
                      "id": 7818,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "8096:20:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_int256",
                        "typeString": "int256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 7819,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "8120:1:35",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "8096:25:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 7814,
                  "id": 7821,
                  "nodeType": "Return",
                  "src": "8089:32:35"
                }
              ]
            },
            "documentation": null,
            "id": 7823,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "equals",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7811,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7808,
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 7823,
                  "src": "8001:17:35",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                    "typeString": "struct StringUtils.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 7807,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7338,
                    "src": "8001:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$7338_storage_ptr",
                      "typeString": "struct StringUtils.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7810,
                  "name": "other",
                  "nodeType": "VariableDeclaration",
                  "scope": 7823,
                  "src": "8020:18:35",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                    "typeString": "struct StringUtils.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 7809,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7338,
                    "src": "8020:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$7338_storage_ptr",
                      "typeString": "struct StringUtils.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8000:39:35"
            },
            "payable": false,
            "returnParameters": {
              "id": 7814,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7813,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 7823,
                  "src": "8075:4:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 7812,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "8075:4:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8074:6:35"
            },
            "scope": 9026,
            "src": "7985:141:35",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 7940,
              "nodeType": "Block",
              "src": "8510:665:35",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7837,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 7832,
                        "name": "rune",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7827,
                        "src": "8516:4:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                          "typeString": "struct StringUtils.slice memory"
                        }
                      },
                      "id": 7834,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "_ptr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7337,
                      "src": "8516:9:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 7835,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7825,
                        "src": "8528:4:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                          "typeString": "struct StringUtils.slice memory"
                        }
                      },
                      "id": 7836,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_ptr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7337,
                      "src": "8528:9:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "8516:21:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 7838,
                  "nodeType": "ExpressionStatement",
                  "src": "8516:21:35"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 7842,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 7839,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7825,
                        "src": "8548:4:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                          "typeString": "struct StringUtils.slice memory"
                        }
                      },
                      "id": 7840,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7335,
                      "src": "8548:9:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 7841,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "8561:1:35",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "8548:14:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 7852,
                  "nodeType": "IfStatement",
                  "src": "8544:67:35",
                  "trueBody": {
                    "id": 7851,
                    "nodeType": "Block",
                    "src": "8564:47:35",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 7847,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 7843,
                              "name": "rune",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7827,
                              "src": "8572:4:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                                "typeString": "struct StringUtils.slice memory"
                              }
                            },
                            "id": 7845,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "_len",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 7335,
                            "src": "8572:9:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 7846,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "8584:1:35",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "8572:13:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 7848,
                        "nodeType": "ExpressionStatement",
                        "src": "8572:13:35"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 7849,
                          "name": "rune",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7827,
                          "src": "8600:4:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                            "typeString": "struct StringUtils.slice memory"
                          }
                        },
                        "functionReturnParameters": 7831,
                        "id": 7850,
                        "nodeType": "Return",
                        "src": "8593:11:35"
                      }
                    ]
                  }
                },
                {
                  "assignments": [],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7854,
                      "name": "l",
                      "nodeType": "VariableDeclaration",
                      "scope": 7941,
                      "src": "8617:9:35",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7853,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "8617:7:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7855,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8617:9:35"
                },
                {
                  "assignments": [],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7857,
                      "name": "b",
                      "nodeType": "VariableDeclaration",
                      "scope": 7941,
                      "src": "8632:9:35",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7856,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "8632:7:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7858,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8632:9:35"
                },
                {
                  "externalReferences": [
                    {
                      "b": {
                        "declaration": 7857,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "8722:1:35",
                        "valueSize": 1
                      }
                    },
                    {
                      "self": {
                        "declaration": 7825,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "8751:4:35",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 7859,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    b := and(mload(sub(mload(add(self, 32)), 31)), 0xFF)\n}",
                  "src": "8705:82:35"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 7862,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 7860,
                      "name": "b",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7857,
                      "src": "8789:1:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30783830",
                      "id": 7861,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "8793:4:35",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_128_by_1",
                        "typeString": "int_const 128"
                      },
                      "value": "0x80"
                    },
                    "src": "8789:8:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "condition": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 7870,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 7868,
                        "name": "b",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7857,
                        "src": "8829:1:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "<",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "30784530",
                        "id": 7869,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "8833:4:35",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_224_by_1",
                          "typeString": "int_const 224"
                        },
                        "value": "0xE0"
                      },
                      "src": "8829:8:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseBody": {
                      "condition": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 7878,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 7876,
                          "name": "b",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7857,
                          "src": "8869:1:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30784630",
                          "id": 7877,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "8873:4:35",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_240_by_1",
                            "typeString": "int_const 240"
                          },
                          "value": "0xF0"
                        },
                        "src": "8869:8:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "falseBody": {
                        "id": 7888,
                        "nodeType": "Block",
                        "src": "8905:20:35",
                        "statements": [
                          {
                            "expression": {
                              "argumentTypes": null,
                              "id": 7886,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "argumentTypes": null,
                                "id": 7884,
                                "name": "l",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7854,
                                "src": "8913:1:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "argumentTypes": null,
                                "hexValue": "34",
                                "id": 7885,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "8917:1:35",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_4_by_1",
                                  "typeString": "int_const 4"
                                },
                                "value": "4"
                              },
                              "src": "8913:5:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 7887,
                            "nodeType": "ExpressionStatement",
                            "src": "8913:5:35"
                          }
                        ]
                      },
                      "id": 7889,
                      "nodeType": "IfStatement",
                      "src": "8865:60:35",
                      "trueBody": {
                        "id": 7883,
                        "nodeType": "Block",
                        "src": "8879:20:35",
                        "statements": [
                          {
                            "expression": {
                              "argumentTypes": null,
                              "id": 7881,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "argumentTypes": null,
                                "id": 7879,
                                "name": "l",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7854,
                                "src": "8887:1:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "argumentTypes": null,
                                "hexValue": "33",
                                "id": 7880,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "8891:1:35",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_3_by_1",
                                  "typeString": "int_const 3"
                                },
                                "value": "3"
                              },
                              "src": "8887:5:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 7882,
                            "nodeType": "ExpressionStatement",
                            "src": "8887:5:35"
                          }
                        ]
                      }
                    },
                    "id": 7890,
                    "nodeType": "IfStatement",
                    "src": "8825:100:35",
                    "trueBody": {
                      "id": 7875,
                      "nodeType": "Block",
                      "src": "8839:20:35",
                      "statements": [
                        {
                          "expression": {
                            "argumentTypes": null,
                            "id": 7873,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "argumentTypes": null,
                              "id": 7871,
                              "name": "l",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7854,
                              "src": "8847:1:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "argumentTypes": null,
                              "hexValue": "32",
                              "id": 7872,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "8851:1:35",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_2_by_1",
                                "typeString": "int_const 2"
                              },
                              "value": "2"
                            },
                            "src": "8847:5:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 7874,
                          "nodeType": "ExpressionStatement",
                          "src": "8847:5:35"
                        }
                      ]
                    }
                  },
                  "id": 7891,
                  "nodeType": "IfStatement",
                  "src": "8785:140:35",
                  "trueBody": {
                    "id": 7867,
                    "nodeType": "Block",
                    "src": "8799:20:35",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 7865,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 7863,
                            "name": "l",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7854,
                            "src": "8807:1:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "31",
                            "id": 7864,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "8811:1:35",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "src": "8807:5:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 7866,
                        "nodeType": "ExpressionStatement",
                        "src": "8807:5:35"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 7895,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 7892,
                      "name": "l",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7854,
                      "src": "8973:1:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 7893,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7825,
                        "src": "8977:4:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                          "typeString": "struct StringUtils.slice memory"
                        }
                      },
                      "id": 7894,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7335,
                      "src": "8977:9:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "8973:13:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 7919,
                  "nodeType": "IfStatement",
                  "src": "8969:125:35",
                  "trueBody": {
                    "id": 7918,
                    "nodeType": "Block",
                    "src": "8988:106:35",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 7901,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 7896,
                              "name": "rune",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7827,
                              "src": "8996:4:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                                "typeString": "struct StringUtils.slice memory"
                              }
                            },
                            "id": 7898,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "_len",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 7335,
                            "src": "8996:9:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 7899,
                              "name": "self",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7825,
                              "src": "9008:4:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                                "typeString": "struct StringUtils.slice memory"
                              }
                            },
                            "id": 7900,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "_len",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 7335,
                            "src": "9008:9:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "8996:21:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 7902,
                        "nodeType": "ExpressionStatement",
                        "src": "8996:21:35"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 7908,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 7903,
                              "name": "self",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7825,
                              "src": "9025:4:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                                "typeString": "struct StringUtils.slice memory"
                              }
                            },
                            "id": 7905,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "_ptr",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 7337,
                            "src": "9025:9:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 7906,
                              "name": "self",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7825,
                              "src": "9038:4:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                                "typeString": "struct StringUtils.slice memory"
                              }
                            },
                            "id": 7907,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "_len",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 7335,
                            "src": "9038:9:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "9025:22:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 7909,
                        "nodeType": "ExpressionStatement",
                        "src": "9025:22:35"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 7914,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 7910,
                              "name": "self",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7825,
                              "src": "9055:4:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                                "typeString": "struct StringUtils.slice memory"
                              }
                            },
                            "id": 7912,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "_len",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 7335,
                            "src": "9055:9:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 7913,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "9067:1:35",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "9055:13:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 7915,
                        "nodeType": "ExpressionStatement",
                        "src": "9055:13:35"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 7916,
                          "name": "rune",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7827,
                          "src": "9083:4:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                            "typeString": "struct StringUtils.slice memory"
                          }
                        },
                        "functionReturnParameters": 7831,
                        "id": 7917,
                        "nodeType": "Return",
                        "src": "9076:11:35"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7924,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 7920,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7825,
                        "src": "9100:4:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                          "typeString": "struct StringUtils.slice memory"
                        }
                      },
                      "id": 7922,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "_ptr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7337,
                      "src": "9100:9:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "+=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 7923,
                      "name": "l",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7854,
                      "src": "9113:1:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "9100:14:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 7925,
                  "nodeType": "ExpressionStatement",
                  "src": "9100:14:35"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7930,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 7926,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7825,
                        "src": "9120:4:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                          "typeString": "struct StringUtils.slice memory"
                        }
                      },
                      "id": 7928,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7335,
                      "src": "9120:9:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "-=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 7929,
                      "name": "l",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7854,
                      "src": "9133:1:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "9120:14:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 7931,
                  "nodeType": "ExpressionStatement",
                  "src": "9120:14:35"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7936,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 7932,
                        "name": "rune",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7827,
                        "src": "9140:4:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                          "typeString": "struct StringUtils.slice memory"
                        }
                      },
                      "id": 7934,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7335,
                      "src": "9140:9:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 7935,
                      "name": "l",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7854,
                      "src": "9152:1:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "9140:13:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 7937,
                  "nodeType": "ExpressionStatement",
                  "src": "9140:13:35"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7938,
                    "name": "rune",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 7827,
                    "src": "9166:4:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                      "typeString": "struct StringUtils.slice memory"
                    }
                  },
                  "functionReturnParameters": 7831,
                  "id": 7939,
                  "nodeType": "Return",
                  "src": "9159:11:35"
                }
              ]
            },
            "documentation": null,
            "id": 7941,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "nextRune",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7828,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7825,
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 7941,
                  "src": "8421:17:35",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                    "typeString": "struct StringUtils.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 7824,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7338,
                    "src": "8421:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$7338_storage_ptr",
                      "typeString": "struct StringUtils.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7827,
                  "name": "rune",
                  "nodeType": "VariableDeclaration",
                  "scope": 7941,
                  "src": "8440:17:35",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                    "typeString": "struct StringUtils.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 7826,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7338,
                    "src": "8440:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$7338_storage_ptr",
                      "typeString": "struct StringUtils.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8420:38:35"
            },
            "payable": false,
            "returnParameters": {
              "id": 7831,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7830,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 7941,
                  "src": "8494:5:35",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                    "typeString": "struct StringUtils.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 7829,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7338,
                    "src": "8494:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$7338_storage_ptr",
                      "typeString": "struct StringUtils.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8493:14:35"
            },
            "scope": 9026,
            "src": "8403:772:35",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 7953,
              "nodeType": "Block",
              "src": "9493:30:35",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7949,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7943,
                        "src": "9508:4:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                          "typeString": "struct StringUtils.slice memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7950,
                        "name": "ret",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7946,
                        "src": "9514:3:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                          "typeString": "struct StringUtils.slice memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                          "typeString": "struct StringUtils.slice memory"
                        },
                        {
                          "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                          "typeString": "struct StringUtils.slice memory"
                        }
                      ],
                      "id": 7948,
                      "name": "nextRune",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        7941,
                        7954
                      ],
                      "referencedDeclaration": 7941,
                      "src": "9499:8:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_struct$_slice_$7338_memory_ptr_$_t_struct$_slice_$7338_memory_ptr_$returns$_t_struct$_slice_$7338_memory_ptr_$",
                        "typeString": "function (struct StringUtils.slice memory,struct StringUtils.slice memory) pure returns (struct StringUtils.slice memory)"
                      }
                    },
                    "id": 7951,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9499:19:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                      "typeString": "struct StringUtils.slice memory"
                    }
                  },
                  "id": 7952,
                  "nodeType": "ExpressionStatement",
                  "src": "9499:19:35"
                }
              ]
            },
            "documentation": null,
            "id": 7954,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "nextRune",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7944,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7943,
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 7954,
                  "src": "9419:17:35",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                    "typeString": "struct StringUtils.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 7942,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7338,
                    "src": "9419:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$7338_storage_ptr",
                      "typeString": "struct StringUtils.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9418:19:35"
            },
            "payable": false,
            "returnParameters": {
              "id": 7947,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7946,
                  "name": "ret",
                  "nodeType": "VariableDeclaration",
                  "scope": 7954,
                  "src": "9473:16:35",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                    "typeString": "struct StringUtils.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 7945,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7338,
                    "src": "9473:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$7338_storage_ptr",
                      "typeString": "struct StringUtils.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9472:18:35"
            },
            "scope": 9026,
            "src": "9401:122:35",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 8100,
              "nodeType": "Block",
              "src": "9775:855:35",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 7964,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 7961,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7956,
                        "src": "9785:4:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                          "typeString": "struct StringUtils.slice memory"
                        }
                      },
                      "id": 7962,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7335,
                      "src": "9785:9:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 7963,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "9798:1:35",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "9785:14:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 7968,
                  "nodeType": "IfStatement",
                  "src": "9781:43:35",
                  "trueBody": {
                    "id": 7967,
                    "nodeType": "Block",
                    "src": "9801:23:35",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 7965,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "9816:1:35",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "functionReturnParameters": 7960,
                        "id": 7966,
                        "nodeType": "Return",
                        "src": "9809:8:35"
                      }
                    ]
                  }
                },
                {
                  "assignments": [],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7970,
                      "name": "word",
                      "nodeType": "VariableDeclaration",
                      "scope": 8101,
                      "src": "9830:12:35",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7969,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "9830:7:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7971,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "9830:12:35"
                },
                {
                  "assignments": [],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7973,
                      "name": "length",
                      "nodeType": "VariableDeclaration",
                      "scope": 8101,
                      "src": "9848:14:35",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7972,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "9848:7:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7974,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "9848:14:35"
                },
                {
                  "assignments": [
                    7976
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7976,
                      "name": "divisor",
                      "nodeType": "VariableDeclaration",
                      "scope": 8101,
                      "src": "9868:15:35",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7975,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "9868:7:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7980,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_rational_452312848583266388373324160190187140051835877600158453279131187530910662656_by_1",
                      "typeString": "int_const 4523...(67 digits omitted)...2656"
                    },
                    "id": 7979,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "hexValue": "32",
                      "id": 7977,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "9886:1:35",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_2_by_1",
                        "typeString": "int_const 2"
                      },
                      "value": "2"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "**",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "323438",
                      "id": 7978,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "9889:3:35",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_248_by_1",
                        "typeString": "int_const 248"
                      },
                      "value": "248"
                    },
                    "src": "9886:6:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_452312848583266388373324160190187140051835877600158453279131187530910662656_by_1",
                      "typeString": "int_const 4523...(67 digits omitted)...2656"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "9868:24:35"
                },
                {
                  "externalReferences": [
                    {
                      "word": {
                        "declaration": 7970,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "9956:4:35",
                        "valueSize": 1
                      }
                    },
                    {
                      "self": {
                        "declaration": 7956,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "9980:4:35",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 7981,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    word := mload(mload(add(self, 32)))\n}",
                  "src": "9939:70:35"
                },
                {
                  "assignments": [
                    7983
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7983,
                      "name": "b",
                      "nodeType": "VariableDeclaration",
                      "scope": 8101,
                      "src": "10002:9:35",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7982,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "10002:7:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7987,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 7986,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 7984,
                      "name": "word",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7970,
                      "src": "10014:4:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "/",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 7985,
                      "name": "divisor",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7976,
                      "src": "10021:7:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "10014:14:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "10002:26:35"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 7990,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 7988,
                      "name": "b",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7983,
                      "src": "10038:1:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30783830",
                      "id": 7989,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "10042:4:35",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_128_by_1",
                        "typeString": "int_const 128"
                      },
                      "value": "0x80"
                    },
                    "src": "10038:8:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "condition": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 8002,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 8000,
                        "name": "b",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7983,
                        "src": "10098:1:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "<",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "30784530",
                        "id": 8001,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "10102:4:35",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_224_by_1",
                          "typeString": "int_const 224"
                        },
                        "value": "0xE0"
                      },
                      "src": "10098:8:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseBody": {
                      "condition": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 8016,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 8014,
                          "name": "b",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7983,
                          "src": "10165:1:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30784630",
                          "id": 8015,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "10169:4:35",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_240_by_1",
                            "typeString": "int_const 240"
                          },
                          "value": "0xF0"
                        },
                        "src": "10165:8:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "falseBody": {
                        "id": 8038,
                        "nodeType": "Block",
                        "src": "10228:47:35",
                        "statements": [
                          {
                            "expression": {
                              "argumentTypes": null,
                              "id": 8032,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "argumentTypes": null,
                                "id": 8028,
                                "name": "ret",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7959,
                                "src": "10236:3:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 8031,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "id": 8029,
                                  "name": "b",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7983,
                                  "src": "10242:1:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "&",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "hexValue": "30783037",
                                  "id": 8030,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "10246:4:35",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_7_by_1",
                                    "typeString": "int_const 7"
                                  },
                                  "value": "0x07"
                                },
                                "src": "10242:8:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "10236:14:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 8033,
                            "nodeType": "ExpressionStatement",
                            "src": "10236:14:35"
                          },
                          {
                            "expression": {
                              "argumentTypes": null,
                              "id": 8036,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "argumentTypes": null,
                                "id": 8034,
                                "name": "length",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7973,
                                "src": "10258:6:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "argumentTypes": null,
                                "hexValue": "34",
                                "id": 8035,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "10267:1:35",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_4_by_1",
                                  "typeString": "int_const 4"
                                },
                                "value": "4"
                              },
                              "src": "10258:10:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 8037,
                            "nodeType": "ExpressionStatement",
                            "src": "10258:10:35"
                          }
                        ]
                      },
                      "id": 8039,
                      "nodeType": "IfStatement",
                      "src": "10161:114:35",
                      "trueBody": {
                        "id": 8027,
                        "nodeType": "Block",
                        "src": "10175:47:35",
                        "statements": [
                          {
                            "expression": {
                              "argumentTypes": null,
                              "id": 8021,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "argumentTypes": null,
                                "id": 8017,
                                "name": "ret",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7959,
                                "src": "10183:3:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 8020,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "id": 8018,
                                  "name": "b",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7983,
                                  "src": "10189:1:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "&",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "hexValue": "30783046",
                                  "id": 8019,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "10193:4:35",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_15_by_1",
                                    "typeString": "int_const 15"
                                  },
                                  "value": "0x0F"
                                },
                                "src": "10189:8:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "10183:14:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 8022,
                            "nodeType": "ExpressionStatement",
                            "src": "10183:14:35"
                          },
                          {
                            "expression": {
                              "argumentTypes": null,
                              "id": 8025,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "argumentTypes": null,
                                "id": 8023,
                                "name": "length",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7973,
                                "src": "10205:6:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "argumentTypes": null,
                                "hexValue": "33",
                                "id": 8024,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "10214:1:35",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_3_by_1",
                                  "typeString": "int_const 3"
                                },
                                "value": "3"
                              },
                              "src": "10205:10:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 8026,
                            "nodeType": "ExpressionStatement",
                            "src": "10205:10:35"
                          }
                        ]
                      }
                    },
                    "id": 8040,
                    "nodeType": "IfStatement",
                    "src": "10094:181:35",
                    "trueBody": {
                      "id": 8013,
                      "nodeType": "Block",
                      "src": "10108:47:35",
                      "statements": [
                        {
                          "expression": {
                            "argumentTypes": null,
                            "id": 8007,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "argumentTypes": null,
                              "id": 8003,
                              "name": "ret",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7959,
                              "src": "10116:3:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 8006,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 8004,
                                "name": "b",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7983,
                                "src": "10122:1:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "&",
                              "rightExpression": {
                                "argumentTypes": null,
                                "hexValue": "30783146",
                                "id": 8005,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "10126:4:35",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_31_by_1",
                                  "typeString": "int_const 31"
                                },
                                "value": "0x1F"
                              },
                              "src": "10122:8:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "10116:14:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 8008,
                          "nodeType": "ExpressionStatement",
                          "src": "10116:14:35"
                        },
                        {
                          "expression": {
                            "argumentTypes": null,
                            "id": 8011,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "argumentTypes": null,
                              "id": 8009,
                              "name": "length",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7973,
                              "src": "10138:6:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "argumentTypes": null,
                              "hexValue": "32",
                              "id": 8010,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "10147:1:35",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_2_by_1",
                                "typeString": "int_const 2"
                              },
                              "value": "2"
                            },
                            "src": "10138:10:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 8012,
                          "nodeType": "ExpressionStatement",
                          "src": "10138:10:35"
                        }
                      ]
                    }
                  },
                  "id": 8041,
                  "nodeType": "IfStatement",
                  "src": "10034:241:35",
                  "trueBody": {
                    "id": 7999,
                    "nodeType": "Block",
                    "src": "10048:40:35",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 7993,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 7991,
                            "name": "ret",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7959,
                            "src": "10056:3:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 7992,
                            "name": "b",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7983,
                            "src": "10062:1:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "10056:7:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 7994,
                        "nodeType": "ExpressionStatement",
                        "src": "10056:7:35"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 7997,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 7995,
                            "name": "length",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7973,
                            "src": "10071:6:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "31",
                            "id": 7996,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "10080:1:35",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "src": "10071:10:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 7998,
                        "nodeType": "ExpressionStatement",
                        "src": "10071:10:35"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 8045,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 8042,
                      "name": "length",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7973,
                      "src": "10323:6:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 8043,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7956,
                        "src": "10332:4:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                          "typeString": "struct StringUtils.slice memory"
                        }
                      },
                      "id": 8044,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7335,
                      "src": "10332:9:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "10323:18:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 8049,
                  "nodeType": "IfStatement",
                  "src": "10319:47:35",
                  "trueBody": {
                    "id": 8048,
                    "nodeType": "Block",
                    "src": "10343:23:35",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 8046,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "10358:1:35",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "functionReturnParameters": 7960,
                        "id": 8047,
                        "nodeType": "Return",
                        "src": "10351:8:35"
                      }
                    ]
                  }
                },
                {
                  "body": {
                    "id": 8096,
                    "nodeType": "Block",
                    "src": "10409:200:35",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 8064,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 8060,
                            "name": "divisor",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7976,
                            "src": "10417:7:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 8063,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "id": 8061,
                              "name": "divisor",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7976,
                              "src": "10427:7:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "/",
                            "rightExpression": {
                              "argumentTypes": null,
                              "hexValue": "323536",
                              "id": 8062,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "10437:3:35",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_256_by_1",
                                "typeString": "int_const 256"
                              },
                              "value": "256"
                            },
                            "src": "10427:13:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "10417:23:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 8065,
                        "nodeType": "ExpressionStatement",
                        "src": "10417:23:35"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 8073,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 8066,
                            "name": "b",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7983,
                            "src": "10448:1:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 8072,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "components": [
                                {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 8069,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "id": 8067,
                                    "name": "word",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7970,
                                    "src": "10453:4:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "/",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "id": 8068,
                                    "name": "divisor",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7976,
                                    "src": "10460:7:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "10453:14:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "id": 8070,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "10452:16:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "&",
                            "rightExpression": {
                              "argumentTypes": null,
                              "hexValue": "30784646",
                              "id": 8071,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "10471:4:35",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_255_by_1",
                                "typeString": "int_const 255"
                              },
                              "value": "0xFF"
                            },
                            "src": "10452:23:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "10448:27:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 8074,
                        "nodeType": "ExpressionStatement",
                        "src": "10448:27:35"
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 8079,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 8077,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "id": 8075,
                              "name": "b",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7983,
                              "src": "10487:1:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "&",
                            "rightExpression": {
                              "argumentTypes": null,
                              "hexValue": "30784330",
                              "id": 8076,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "10491:4:35",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_192_by_1",
                                "typeString": "int_const 192"
                              },
                              "value": "0xC0"
                            },
                            "src": "10487:8:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30783830",
                            "id": 8078,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "10499:4:35",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_128_by_1",
                              "typeString": "int_const 128"
                            },
                            "value": "0x80"
                          },
                          "src": "10487:16:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 8083,
                        "nodeType": "IfStatement",
                        "src": "10483:83:35",
                        "trueBody": {
                          "id": 8082,
                          "nodeType": "Block",
                          "src": "10505:61:35",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 8080,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "10556:1:35",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "functionReturnParameters": 7960,
                              "id": 8081,
                              "nodeType": "Return",
                              "src": "10549:8:35"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 8094,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 8084,
                            "name": "ret",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7959,
                            "src": "10573:3:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 8093,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "components": [
                                {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 8087,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "id": 8085,
                                    "name": "ret",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7959,
                                    "src": "10580:3:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "*",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "hexValue": "3634",
                                    "id": 8086,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "10586:2:35",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_64_by_1",
                                      "typeString": "int_const 64"
                                    },
                                    "value": "64"
                                  },
                                  "src": "10580:8:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "id": 8088,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "10579:10:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "|",
                            "rightExpression": {
                              "argumentTypes": null,
                              "components": [
                                {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 8091,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "id": 8089,
                                    "name": "b",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7983,
                                    "src": "10593:1:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "&",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "hexValue": "30783346",
                                    "id": 8090,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "10597:4:35",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_63_by_1",
                                      "typeString": "int_const 63"
                                    },
                                    "value": "0x3F"
                                  },
                                  "src": "10593:8:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "id": 8092,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "10592:10:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "10579:23:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "10573:29:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 8095,
                        "nodeType": "ExpressionStatement",
                        "src": "10573:29:35"
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 8056,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 8054,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8051,
                      "src": "10392:1:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 8055,
                      "name": "length",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7973,
                      "src": "10396:6:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "10392:10:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 8097,
                  "initializationExpression": {
                    "assignments": [
                      8051
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 8051,
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "scope": 8101,
                        "src": "10377:9:35",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 8050,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "10377:7:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 8053,
                    "initialValue": {
                      "argumentTypes": null,
                      "hexValue": "31",
                      "id": 8052,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "10389:1:35",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "10377:13:35"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 8058,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "10404:3:35",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 8057,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8051,
                        "src": "10404:1:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 8059,
                    "nodeType": "ExpressionStatement",
                    "src": "10404:3:35"
                  },
                  "nodeType": "ForStatement",
                  "src": "10372:237:35"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8098,
                    "name": "ret",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 7959,
                    "src": "10622:3:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 7960,
                  "id": 8099,
                  "nodeType": "Return",
                  "src": "10615:10:35"
                }
              ]
            },
            "documentation": null,
            "id": 8101,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "ord",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7957,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7956,
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 8101,
                  "src": "9720:17:35",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                    "typeString": "struct StringUtils.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 7955,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7338,
                    "src": "9720:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$7338_storage_ptr",
                      "typeString": "struct StringUtils.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9719:19:35"
            },
            "payable": false,
            "returnParameters": {
              "id": 7960,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7959,
                  "name": "ret",
                  "nodeType": "VariableDeclaration",
                  "scope": 8101,
                  "src": "9762:11:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7958,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9762:7:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9761:13:35"
            },
            "scope": 9026,
            "src": "9707:923:35",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 8109,
              "nodeType": "Block",
              "src": "10840:84:35",
              "statements": [
                {
                  "externalReferences": [
                    {
                      "self": {
                        "declaration": 8103,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "10908:4:35",
                        "valueSize": 1
                      }
                    },
                    {
                      "ret": {
                        "declaration": 8106,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "10863:3:35",
                        "valueSize": 1
                      }
                    },
                    {
                      "self": {
                        "declaration": 8103,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "10890:4:35",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 8108,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    ret := keccak256(mload(add(self, 32)), mload(self))\n}",
                  "src": "10846:78:35"
                }
              ]
            },
            "documentation": null,
            "id": 8110,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "keccak",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8104,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8103,
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 8110,
                  "src": "10785:17:35",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                    "typeString": "struct StringUtils.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8102,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7338,
                    "src": "10785:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$7338_storage_ptr",
                      "typeString": "struct StringUtils.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10784:19:35"
            },
            "payable": false,
            "returnParameters": {
              "id": 8107,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8106,
                  "name": "ret",
                  "nodeType": "VariableDeclaration",
                  "scope": 8110,
                  "src": "10827:11:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 8105,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "10827:7:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10826:13:35"
            },
            "scope": 9026,
            "src": "10769:155:35",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 8143,
              "nodeType": "Block",
              "src": "11262:386:35",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 8123,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 8119,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8112,
                        "src": "11272:4:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                          "typeString": "struct StringUtils.slice memory"
                        }
                      },
                      "id": 8120,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7335,
                      "src": "11272:9:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 8121,
                        "name": "needle",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8114,
                        "src": "11284:6:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                          "typeString": "struct StringUtils.slice memory"
                        }
                      },
                      "id": 8122,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7335,
                      "src": "11284:11:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "11272:23:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 8127,
                  "nodeType": "IfStatement",
                  "src": "11268:56:35",
                  "trueBody": {
                    "id": 8126,
                    "nodeType": "Block",
                    "src": "11297:27:35",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "66616c7365",
                          "id": 8124,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "11312:5:35",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "false"
                        },
                        "functionReturnParameters": 8118,
                        "id": 8125,
                        "nodeType": "Return",
                        "src": "11305:12:35"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 8132,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 8128,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8112,
                        "src": "11334:4:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                          "typeString": "struct StringUtils.slice memory"
                        }
                      },
                      "id": 8129,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_ptr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7337,
                      "src": "11334:9:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 8130,
                        "name": "needle",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8114,
                        "src": "11347:6:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                          "typeString": "struct StringUtils.slice memory"
                        }
                      },
                      "id": 8131,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_ptr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7337,
                      "src": "11347:11:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "11334:24:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 8136,
                  "nodeType": "IfStatement",
                  "src": "11330:56:35",
                  "trueBody": {
                    "id": 8135,
                    "nodeType": "Block",
                    "src": "11360:26:35",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "74727565",
                          "id": 8133,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "11375:4:35",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        "functionReturnParameters": 8118,
                        "id": 8134,
                        "nodeType": "Return",
                        "src": "11368:11:35"
                      }
                    ]
                  }
                },
                {
                  "assignments": [],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8138,
                      "name": "equal",
                      "nodeType": "VariableDeclaration",
                      "scope": 8144,
                      "src": "11392:10:35",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 8137,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "11392:4:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8139,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "11392:10:35"
                },
                {
                  "externalReferences": [
                    {
                      "needle": {
                        "declaration": 8114,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "11445:6:35",
                        "valueSize": 1
                      }
                    },
                    {
                      "self": {
                        "declaration": 8112,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "11484:4:35",
                        "valueSize": 1
                      }
                    },
                    {
                      "equal": {
                        "declaration": 8138,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "11551:5:35",
                        "valueSize": 1
                      }
                    },
                    {
                      "needle": {
                        "declaration": 8114,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "11530:6:35",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 8140,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    let length := mload(needle)\n    let selfptr := mload(add(self, 0x20))\n    let needleptr := mload(add(needle, 0x20))\n    equal := eq(keccak256(selfptr, length), keccak256(needleptr, length))\n}",
                  "src": "11408:229:35"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8141,
                    "name": "equal",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8138,
                    "src": "11638:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 8118,
                  "id": 8142,
                  "nodeType": "Return",
                  "src": "11631:12:35"
                }
              ]
            },
            "documentation": null,
            "id": 8144,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "startsWith",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8115,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8112,
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 8144,
                  "src": "11179:17:35",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                    "typeString": "struct StringUtils.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8111,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7338,
                    "src": "11179:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$7338_storage_ptr",
                      "typeString": "struct StringUtils.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8114,
                  "name": "needle",
                  "nodeType": "VariableDeclaration",
                  "scope": 8144,
                  "src": "11198:19:35",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                    "typeString": "struct StringUtils.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8113,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7338,
                    "src": "11198:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$7338_storage_ptr",
                      "typeString": "struct StringUtils.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11178:40:35"
            },
            "payable": false,
            "returnParameters": {
              "id": 8118,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8117,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8144,
                  "src": "11254:4:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 8116,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "11254:4:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11253:6:35"
            },
            "scope": 9026,
            "src": "11159:489:35",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 8193,
              "nodeType": "Block",
              "src": "12011:472:35",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 8157,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 8153,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8146,
                        "src": "12021:4:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                          "typeString": "struct StringUtils.slice memory"
                        }
                      },
                      "id": 8154,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7335,
                      "src": "12021:9:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 8155,
                        "name": "needle",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8148,
                        "src": "12033:6:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                          "typeString": "struct StringUtils.slice memory"
                        }
                      },
                      "id": 8156,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7335,
                      "src": "12033:11:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "12021:23:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 8161,
                  "nodeType": "IfStatement",
                  "src": "12017:55:35",
                  "trueBody": {
                    "id": 8160,
                    "nodeType": "Block",
                    "src": "12046:26:35",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 8158,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8146,
                          "src": "12061:4:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                            "typeString": "struct StringUtils.slice memory"
                          }
                        },
                        "functionReturnParameters": 8152,
                        "id": 8159,
                        "nodeType": "Return",
                        "src": "12054:11:35"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    8163
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8163,
                      "name": "equal",
                      "nodeType": "VariableDeclaration",
                      "scope": 8194,
                      "src": "12078:10:35",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 8162,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "12078:4:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8165,
                  "initialValue": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 8164,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "12091:4:35",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "12078:17:35"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 8170,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 8166,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8146,
                        "src": "12105:4:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                          "typeString": "struct StringUtils.slice memory"
                        }
                      },
                      "id": 8167,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_ptr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7337,
                      "src": "12105:9:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 8168,
                        "name": "needle",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8148,
                        "src": "12118:6:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                          "typeString": "struct StringUtils.slice memory"
                        }
                      },
                      "id": 8169,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_ptr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7337,
                      "src": "12118:11:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "12105:24:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 8173,
                  "nodeType": "IfStatement",
                  "src": "12101:272:35",
                  "trueBody": {
                    "id": 8172,
                    "nodeType": "Block",
                    "src": "12131:242:35",
                    "statements": [
                      {
                        "externalReferences": [
                          {
                            "needle": {
                              "declaration": 8148,
                              "isOffset": false,
                              "isSlot": false,
                              "src": "12178:6:35",
                              "valueSize": 1
                            }
                          },
                          {
                            "self": {
                              "declaration": 8146,
                              "isOffset": false,
                              "isSlot": false,
                              "src": "12219:4:35",
                              "valueSize": 1
                            }
                          },
                          {
                            "equal": {
                              "declaration": 8163,
                              "isOffset": false,
                              "isSlot": false,
                              "src": "12290:5:35",
                              "valueSize": 1
                            }
                          },
                          {
                            "needle": {
                              "declaration": 8148,
                              "isOffset": false,
                              "isSlot": false,
                              "src": "12267:6:35",
                              "valueSize": 1
                            }
                          }
                        ],
                        "id": 8171,
                        "nodeType": "InlineAssembly",
                        "operations": "{\n    let length := mload(needle)\n    let selfptr := mload(add(self, 0x20))\n    let needleptr := mload(add(needle, 0x20))\n    equal := eq(keccak256(selfptr, length), keccak256(needleptr, length))\n}",
                        "src": "12139:234:35"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "id": 8174,
                    "name": "equal",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8163,
                    "src": "12383:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 8190,
                  "nodeType": "IfStatement",
                  "src": "12379:82:35",
                  "trueBody": {
                    "id": 8189,
                    "nodeType": "Block",
                    "src": "12390:71:35",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 8180,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 8175,
                              "name": "self",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8146,
                              "src": "12398:4:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                                "typeString": "struct StringUtils.slice memory"
                              }
                            },
                            "id": 8177,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "_len",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 7335,
                            "src": "12398:9:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "-=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 8178,
                              "name": "needle",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8148,
                              "src": "12411:6:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                                "typeString": "struct StringUtils.slice memory"
                              }
                            },
                            "id": 8179,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "_len",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 7335,
                            "src": "12411:11:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "12398:24:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 8181,
                        "nodeType": "ExpressionStatement",
                        "src": "12398:24:35"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 8187,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 8182,
                              "name": "self",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8146,
                              "src": "12430:4:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                                "typeString": "struct StringUtils.slice memory"
                              }
                            },
                            "id": 8184,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "_ptr",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 7337,
                            "src": "12430:9:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 8185,
                              "name": "needle",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8148,
                              "src": "12443:6:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                                "typeString": "struct StringUtils.slice memory"
                              }
                            },
                            "id": 8186,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "_len",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 7335,
                            "src": "12443:11:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "12430:24:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 8188,
                        "nodeType": "ExpressionStatement",
                        "src": "12430:24:35"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8191,
                    "name": "self",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8146,
                    "src": "12474:4:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                      "typeString": "struct StringUtils.slice memory"
                    }
                  },
                  "functionReturnParameters": 8152,
                  "id": 8192,
                  "nodeType": "Return",
                  "src": "12467:11:35"
                }
              ]
            },
            "documentation": null,
            "id": 8194,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "beyond",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8149,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8146,
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 8194,
                  "src": "11920:17:35",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                    "typeString": "struct StringUtils.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8145,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7338,
                    "src": "11920:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$7338_storage_ptr",
                      "typeString": "struct StringUtils.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8148,
                  "name": "needle",
                  "nodeType": "VariableDeclaration",
                  "scope": 8194,
                  "src": "11939:19:35",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                    "typeString": "struct StringUtils.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8147,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7338,
                    "src": "11939:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$7338_storage_ptr",
                      "typeString": "struct StringUtils.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11919:40:35"
            },
            "payable": false,
            "returnParameters": {
              "id": 8152,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8151,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8194,
                  "src": "11995:5:35",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                    "typeString": "struct StringUtils.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8150,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7338,
                    "src": "11995:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$7338_storage_ptr",
                      "typeString": "struct StringUtils.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11994:14:35"
            },
            "scope": 9026,
            "src": "11904:579:35",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 8237,
              "nodeType": "Block",
              "src": "12820:401:35",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 8207,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 8203,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8196,
                        "src": "12830:4:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                          "typeString": "struct StringUtils.slice memory"
                        }
                      },
                      "id": 8204,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7335,
                      "src": "12830:9:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 8205,
                        "name": "needle",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8198,
                        "src": "12842:6:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                          "typeString": "struct StringUtils.slice memory"
                        }
                      },
                      "id": 8206,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7335,
                      "src": "12842:11:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "12830:23:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 8211,
                  "nodeType": "IfStatement",
                  "src": "12826:56:35",
                  "trueBody": {
                    "id": 8210,
                    "nodeType": "Block",
                    "src": "12855:27:35",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "66616c7365",
                          "id": 8208,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "12870:5:35",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "false"
                        },
                        "functionReturnParameters": 8202,
                        "id": 8209,
                        "nodeType": "Return",
                        "src": "12863:12:35"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    8213
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8213,
                      "name": "selfptr",
                      "nodeType": "VariableDeclaration",
                      "scope": 8238,
                      "src": "12888:15:35",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8212,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "12888:7:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8222,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 8221,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 8218,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8214,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8196,
                          "src": "12906:4:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                            "typeString": "struct StringUtils.slice memory"
                          }
                        },
                        "id": 8215,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_ptr",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7337,
                        "src": "12906:9:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "+",
                      "rightExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8216,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8196,
                          "src": "12918:4:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                            "typeString": "struct StringUtils.slice memory"
                          }
                        },
                        "id": 8217,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7335,
                        "src": "12918:9:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "12906:21:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "-",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 8219,
                        "name": "needle",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8198,
                        "src": "12930:6:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                          "typeString": "struct StringUtils.slice memory"
                        }
                      },
                      "id": 8220,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7335,
                      "src": "12930:11:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "12906:35:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "12888:53:35"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 8226,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 8223,
                      "name": "selfptr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8213,
                      "src": "12952:7:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 8224,
                        "name": "needle",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8198,
                        "src": "12963:6:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                          "typeString": "struct StringUtils.slice memory"
                        }
                      },
                      "id": 8225,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_ptr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7337,
                      "src": "12963:11:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "12952:22:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 8230,
                  "nodeType": "IfStatement",
                  "src": "12948:54:35",
                  "trueBody": {
                    "id": 8229,
                    "nodeType": "Block",
                    "src": "12976:26:35",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "74727565",
                          "id": 8227,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "12991:4:35",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        "functionReturnParameters": 8202,
                        "id": 8228,
                        "nodeType": "Return",
                        "src": "12984:11:35"
                      }
                    ]
                  }
                },
                {
                  "assignments": [],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8232,
                      "name": "equal",
                      "nodeType": "VariableDeclaration",
                      "scope": 8238,
                      "src": "13008:10:35",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 8231,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "13008:4:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8233,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "13008:10:35"
                },
                {
                  "externalReferences": [
                    {
                      "needle": {
                        "declaration": 8198,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "13061:6:35",
                        "valueSize": 1
                      }
                    },
                    {
                      "needle": {
                        "declaration": 8198,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "13102:6:35",
                        "valueSize": 1
                      }
                    },
                    {
                      "equal": {
                        "declaration": 8232,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "13123:5:35",
                        "valueSize": 1
                      }
                    },
                    {
                      "selfptr": {
                        "declaration": 8213,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "13145:7:35",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 8234,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    let length := mload(needle)\n    let needleptr := mload(add(needle, 0x20))\n    equal := eq(keccak256(selfptr, length), keccak256(needleptr, length))\n}",
                  "src": "13024:186:35"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8235,
                    "name": "equal",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8232,
                    "src": "13211:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 8202,
                  "id": 8236,
                  "nodeType": "Return",
                  "src": "13204:12:35"
                }
              ]
            },
            "documentation": null,
            "id": 8238,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "endsWith",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8199,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8196,
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 8238,
                  "src": "12737:17:35",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                    "typeString": "struct StringUtils.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8195,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7338,
                    "src": "12737:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$7338_storage_ptr",
                      "typeString": "struct StringUtils.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8198,
                  "name": "needle",
                  "nodeType": "VariableDeclaration",
                  "scope": 8238,
                  "src": "12756:19:35",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                    "typeString": "struct StringUtils.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8197,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7338,
                    "src": "12756:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$7338_storage_ptr",
                      "typeString": "struct StringUtils.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12736:40:35"
            },
            "payable": false,
            "returnParameters": {
              "id": 8202,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8201,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8238,
                  "src": "12812:4:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 8200,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "12812:4:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12811:6:35"
            },
            "scope": 9026,
            "src": "12719:502:35",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 8290,
              "nodeType": "Block",
              "src": "13575:451:35",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 8251,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 8247,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8240,
                        "src": "13585:4:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                          "typeString": "struct StringUtils.slice memory"
                        }
                      },
                      "id": 8248,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7335,
                      "src": "13585:9:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 8249,
                        "name": "needle",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8242,
                        "src": "13597:6:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                          "typeString": "struct StringUtils.slice memory"
                        }
                      },
                      "id": 8250,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7335,
                      "src": "13597:11:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "13585:23:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 8255,
                  "nodeType": "IfStatement",
                  "src": "13581:55:35",
                  "trueBody": {
                    "id": 8254,
                    "nodeType": "Block",
                    "src": "13610:26:35",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 8252,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8240,
                          "src": "13625:4:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                            "typeString": "struct StringUtils.slice memory"
                          }
                        },
                        "functionReturnParameters": 8246,
                        "id": 8253,
                        "nodeType": "Return",
                        "src": "13618:11:35"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    8257
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8257,
                      "name": "selfptr",
                      "nodeType": "VariableDeclaration",
                      "scope": 8291,
                      "src": "13642:15:35",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8256,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "13642:7:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8266,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 8265,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 8262,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8258,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8240,
                          "src": "13660:4:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                            "typeString": "struct StringUtils.slice memory"
                          }
                        },
                        "id": 8259,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_ptr",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7337,
                        "src": "13660:9:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "+",
                      "rightExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8260,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8240,
                          "src": "13672:4:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                            "typeString": "struct StringUtils.slice memory"
                          }
                        },
                        "id": 8261,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7335,
                        "src": "13672:9:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "13660:21:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "-",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 8263,
                        "name": "needle",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8242,
                        "src": "13684:6:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                          "typeString": "struct StringUtils.slice memory"
                        }
                      },
                      "id": 8264,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7335,
                      "src": "13684:11:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "13660:35:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "13642:53:35"
                },
                {
                  "assignments": [
                    8268
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8268,
                      "name": "equal",
                      "nodeType": "VariableDeclaration",
                      "scope": 8291,
                      "src": "13701:10:35",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 8267,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "13701:4:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8270,
                  "initialValue": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 8269,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "13714:4:35",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "13701:17:35"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 8274,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 8271,
                      "name": "selfptr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8257,
                      "src": "13728:7:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 8272,
                        "name": "needle",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8242,
                        "src": "13739:6:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                          "typeString": "struct StringUtils.slice memory"
                        }
                      },
                      "id": 8273,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_ptr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7337,
                      "src": "13739:11:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "13728:22:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 8277,
                  "nodeType": "IfStatement",
                  "src": "13724:224:35",
                  "trueBody": {
                    "id": 8276,
                    "nodeType": "Block",
                    "src": "13752:196:35",
                    "statements": [
                      {
                        "externalReferences": [
                          {
                            "needle": {
                              "declaration": 8242,
                              "isOffset": false,
                              "isSlot": false,
                              "src": "13799:6:35",
                              "valueSize": 1
                            }
                          },
                          {
                            "needle": {
                              "declaration": 8242,
                              "isOffset": false,
                              "isSlot": false,
                              "src": "13842:6:35",
                              "valueSize": 1
                            }
                          },
                          {
                            "equal": {
                              "declaration": 8268,
                              "isOffset": false,
                              "isSlot": false,
                              "src": "13865:5:35",
                              "valueSize": 1
                            }
                          },
                          {
                            "selfptr": {
                              "declaration": 8257,
                              "isOffset": false,
                              "isSlot": false,
                              "src": "13887:7:35",
                              "valueSize": 1
                            }
                          }
                        ],
                        "id": 8275,
                        "nodeType": "InlineAssembly",
                        "operations": "{\n    let length := mload(needle)\n    let needleptr := mload(add(needle, 0x20))\n    equal := eq(keccak256(selfptr, length), keccak256(needleptr, length))\n}",
                        "src": "13760:188:35"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "id": 8278,
                    "name": "equal",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8268,
                    "src": "13958:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 8287,
                  "nodeType": "IfStatement",
                  "src": "13954:50:35",
                  "trueBody": {
                    "id": 8286,
                    "nodeType": "Block",
                    "src": "13965:39:35",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 8284,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 8279,
                              "name": "self",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8240,
                              "src": "13973:4:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                                "typeString": "struct StringUtils.slice memory"
                              }
                            },
                            "id": 8281,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "_len",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 7335,
                            "src": "13973:9:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "-=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 8282,
                              "name": "needle",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8242,
                              "src": "13986:6:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                                "typeString": "struct StringUtils.slice memory"
                              }
                            },
                            "id": 8283,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "_len",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 7335,
                            "src": "13986:11:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "13973:24:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 8285,
                        "nodeType": "ExpressionStatement",
                        "src": "13973:24:35"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8288,
                    "name": "self",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8240,
                    "src": "14017:4:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                      "typeString": "struct StringUtils.slice memory"
                    }
                  },
                  "functionReturnParameters": 8246,
                  "id": 8289,
                  "nodeType": "Return",
                  "src": "14010:11:35"
                }
              ]
            },
            "documentation": null,
            "id": 8291,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "until",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8243,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8240,
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 8291,
                  "src": "13484:17:35",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                    "typeString": "struct StringUtils.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8239,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7338,
                    "src": "13484:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$7338_storage_ptr",
                      "typeString": "struct StringUtils.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8242,
                  "name": "needle",
                  "nodeType": "VariableDeclaration",
                  "scope": 8291,
                  "src": "13503:19:35",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                    "typeString": "struct StringUtils.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8241,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7338,
                    "src": "13503:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$7338_storage_ptr",
                      "typeString": "struct StringUtils.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "13483:40:35"
            },
            "payable": false,
            "returnParameters": {
              "id": 8246,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8245,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8291,
                  "src": "13559:5:35",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                    "typeString": "struct StringUtils.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8244,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7338,
                    "src": "13559:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$7338_storage_ptr",
                      "typeString": "struct StringUtils.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "13558:14:35"
            },
            "scope": 9026,
            "src": "13469:557:35",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 8411,
              "nodeType": "Block",
              "src": "14317:1102:35",
              "statements": [
                {
                  "assignments": [
                    8305
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8305,
                      "name": "ptr",
                      "nodeType": "VariableDeclaration",
                      "scope": 8412,
                      "src": "14323:11:35",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8304,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "14323:7:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8307,
                  "initialValue": {
                    "argumentTypes": null,
                    "id": 8306,
                    "name": "selfptr",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8295,
                    "src": "14337:7:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "14323:21:35"
                },
                {
                  "assignments": [],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8309,
                      "name": "idx",
                      "nodeType": "VariableDeclaration",
                      "scope": 8412,
                      "src": "14350:11:35",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8308,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "14350:7:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8310,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "14350:11:35"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 8313,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 8311,
                      "name": "needlelen",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8297,
                      "src": "14372:9:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 8312,
                      "name": "selflen",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8293,
                      "src": "14385:7:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "14372:20:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 8406,
                  "nodeType": "IfStatement",
                  "src": "14368:1017:35",
                  "trueBody": {
                    "id": 8405,
                    "nodeType": "Block",
                    "src": "14394:991:35",
                    "statements": [
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 8316,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 8314,
                            "name": "needlelen",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8297,
                            "src": "14406:9:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "3332",
                            "id": 8315,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "14419:2:35",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_32_by_1",
                              "typeString": "int_const 32"
                            },
                            "value": "32"
                          },
                          "src": "14406:15:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 8403,
                          "nodeType": "Block",
                          "src": "14983:396:35",
                          "statements": [
                            {
                              "assignments": [],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 8372,
                                  "name": "hash",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 8412,
                                  "src": "15034:12:35",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  "typeName": {
                                    "id": 8371,
                                    "name": "bytes32",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "15034:7:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                }
                              ],
                              "id": 8373,
                              "initialValue": null,
                              "nodeType": "VariableDeclarationStatement",
                              "src": "15034:12:35"
                            },
                            {
                              "externalReferences": [
                                {
                                  "hash": {
                                    "declaration": 8372,
                                    "isOffset": false,
                                    "isSlot": false,
                                    "src": "15077:4:35",
                                    "valueSize": 1
                                  }
                                },
                                {
                                  "needleptr": {
                                    "declaration": 8299,
                                    "isOffset": false,
                                    "isSlot": false,
                                    "src": "15095:9:35",
                                    "valueSize": 1
                                  }
                                },
                                {
                                  "needlelen": {
                                    "declaration": 8297,
                                    "isOffset": false,
                                    "isSlot": false,
                                    "src": "15106:9:35",
                                    "valueSize": 1
                                  }
                                }
                              ],
                              "id": 8374,
                              "nodeType": "InlineAssembly",
                              "operations": "{\n    hash := keccak256(needleptr, needlelen)\n}",
                              "src": "15056:83:35"
                            },
                            {
                              "body": {
                                "id": 8401,
                                "nodeType": "Block",
                                "src": "15185:186:35",
                                "statements": [
                                  {
                                    "assignments": [],
                                    "declarations": [
                                      {
                                        "constant": false,
                                        "id": 8388,
                                        "name": "testHash",
                                        "nodeType": "VariableDeclaration",
                                        "scope": 8412,
                                        "src": "15197:16:35",
                                        "stateVariable": false,
                                        "storageLocation": "default",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        },
                                        "typeName": {
                                          "id": 8387,
                                          "name": "bytes32",
                                          "nodeType": "ElementaryTypeName",
                                          "src": "15197:7:35",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                          }
                                        },
                                        "value": null,
                                        "visibility": "internal"
                                      }
                                    ],
                                    "id": 8389,
                                    "initialValue": null,
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "15197:16:35"
                                  },
                                  {
                                    "externalReferences": [
                                      {
                                        "testHash": {
                                          "declaration": 8388,
                                          "isOffset": false,
                                          "isSlot": false,
                                          "src": "15248:8:35",
                                          "valueSize": 1
                                        }
                                      },
                                      {
                                        "ptr": {
                                          "declaration": 8305,
                                          "isOffset": false,
                                          "isSlot": false,
                                          "src": "15270:3:35",
                                          "valueSize": 1
                                        }
                                      },
                                      {
                                        "needlelen": {
                                          "declaration": 8297,
                                          "isOffset": false,
                                          "isSlot": false,
                                          "src": "15275:9:35",
                                          "valueSize": 1
                                        }
                                      }
                                    ],
                                    "id": 8390,
                                    "nodeType": "InlineAssembly",
                                    "operations": "{\n    testHash := keccak256(ptr, needlelen)\n}",
                                    "src": "15225:85:35"
                                  },
                                  {
                                    "condition": {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      },
                                      "id": 8393,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "argumentTypes": null,
                                        "id": 8391,
                                        "name": "hash",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 8372,
                                        "src": "15312:4:35",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "==",
                                      "rightExpression": {
                                        "argumentTypes": null,
                                        "id": 8392,
                                        "name": "testHash",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 8388,
                                        "src": "15320:8:35",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        }
                                      },
                                      "src": "15312:16:35",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "falseBody": null,
                                    "id": 8396,
                                    "nodeType": "IfStatement",
                                    "src": "15308:32:35",
                                    "trueBody": {
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 8394,
                                        "name": "ptr",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 8305,
                                        "src": "15337:3:35",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "functionReturnParameters": 8303,
                                      "id": 8395,
                                      "nodeType": "Return",
                                      "src": "15330:10:35"
                                    }
                                  },
                                  {
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 8399,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "argumentTypes": null,
                                        "id": 8397,
                                        "name": "ptr",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 8305,
                                        "src": "15352:3:35",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "+=",
                                      "rightHandSide": {
                                        "argumentTypes": null,
                                        "hexValue": "31",
                                        "id": 8398,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "15359:1:35",
                                        "subdenomination": null,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_1_by_1",
                                          "typeString": "int_const 1"
                                        },
                                        "value": "1"
                                      },
                                      "src": "15352:8:35",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 8400,
                                    "nodeType": "ExpressionStatement",
                                    "src": "15352:8:35"
                                  }
                                ]
                              },
                              "condition": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 8383,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "id": 8379,
                                  "name": "idx",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8309,
                                  "src": "15150:3:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "<=",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 8382,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "id": 8380,
                                    "name": "selflen",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8293,
                                    "src": "15157:7:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "-",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "id": 8381,
                                    "name": "needlelen",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8297,
                                    "src": "15167:9:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "15157:19:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "15150:26:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 8402,
                              "initializationExpression": {
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 8377,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftHandSide": {
                                    "argumentTypes": null,
                                    "id": 8375,
                                    "name": "idx",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8309,
                                    "src": "15141:3:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "Assignment",
                                  "operator": "=",
                                  "rightHandSide": {
                                    "argumentTypes": null,
                                    "hexValue": "30",
                                    "id": 8376,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "15147:1:35",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  },
                                  "src": "15141:7:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 8378,
                                "nodeType": "ExpressionStatement",
                                "src": "15141:7:35"
                              },
                              "loopExpression": {
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 8385,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "UnaryOperation",
                                  "operator": "++",
                                  "prefix": false,
                                  "src": "15178:5:35",
                                  "subExpression": {
                                    "argumentTypes": null,
                                    "id": 8384,
                                    "name": "idx",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8309,
                                    "src": "15178:3:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 8386,
                                "nodeType": "ExpressionStatement",
                                "src": "15178:5:35"
                              },
                              "nodeType": "ForStatement",
                              "src": "15136:235:35"
                            }
                          ]
                        },
                        "id": 8404,
                        "nodeType": "IfStatement",
                        "src": "14402:977:35",
                        "trueBody": {
                          "id": 8370,
                          "nodeType": "Block",
                          "src": "14423:554:35",
                          "statements": [
                            {
                              "assignments": [
                                8318
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 8318,
                                  "name": "mask",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 8412,
                                  "src": "14433:12:35",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  "typeName": {
                                    "id": 8317,
                                    "name": "bytes32",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "14433:7:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                }
                              ],
                              "id": 8334,
                              "initialValue": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 8332,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "UnaryOperation",
                                    "operator": "~",
                                    "prefix": true,
                                    "src": "14456:32:35",
                                    "subExpression": {
                                      "argumentTypes": null,
                                      "components": [
                                        {
                                          "argumentTypes": null,
                                          "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          "id": 8330,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "leftExpression": {
                                            "argumentTypes": null,
                                            "commonType": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            },
                                            "id": 8328,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "leftExpression": {
                                              "argumentTypes": null,
                                              "hexValue": "32",
                                              "id": 8320,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "kind": "number",
                                              "lValueRequested": false,
                                              "nodeType": "Literal",
                                              "src": "14458:1:35",
                                              "subdenomination": null,
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_rational_2_by_1",
                                                "typeString": "int_const 2"
                                              },
                                              "value": "2"
                                            },
                                            "nodeType": "BinaryOperation",
                                            "operator": "**",
                                            "rightExpression": {
                                              "argumentTypes": null,
                                              "components": [
                                                {
                                                  "argumentTypes": null,
                                                  "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                  },
                                                  "id": 8326,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "lValueRequested": false,
                                                  "leftExpression": {
                                                    "argumentTypes": null,
                                                    "hexValue": "38",
                                                    "id": 8321,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "kind": "number",
                                                    "lValueRequested": false,
                                                    "nodeType": "Literal",
                                                    "src": "14462:1:35",
                                                    "subdenomination": null,
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_rational_8_by_1",
                                                      "typeString": "int_const 8"
                                                    },
                                                    "value": "8"
                                                  },
                                                  "nodeType": "BinaryOperation",
                                                  "operator": "*",
                                                  "rightExpression": {
                                                    "argumentTypes": null,
                                                    "components": [
                                                      {
                                                        "argumentTypes": null,
                                                        "commonType": {
                                                          "typeIdentifier": "t_uint256",
                                                          "typeString": "uint256"
                                                        },
                                                        "id": 8324,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "leftExpression": {
                                                          "argumentTypes": null,
                                                          "hexValue": "3332",
                                                          "id": 8322,
                                                          "isConstant": false,
                                                          "isLValue": false,
                                                          "isPure": true,
                                                          "kind": "number",
                                                          "lValueRequested": false,
                                                          "nodeType": "Literal",
                                                          "src": "14467:2:35",
                                                          "subdenomination": null,
                                                          "typeDescriptions": {
                                                            "typeIdentifier": "t_rational_32_by_1",
                                                            "typeString": "int_const 32"
                                                          },
                                                          "value": "32"
                                                        },
                                                        "nodeType": "BinaryOperation",
                                                        "operator": "-",
                                                        "rightExpression": {
                                                          "argumentTypes": null,
                                                          "id": 8323,
                                                          "name": "needlelen",
                                                          "nodeType": "Identifier",
                                                          "overloadedDeclarations": [],
                                                          "referencedDeclaration": 8297,
                                                          "src": "14472:9:35",
                                                          "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                          }
                                                        },
                                                        "src": "14467:14:35",
                                                        "typeDescriptions": {
                                                          "typeIdentifier": "t_uint256",
                                                          "typeString": "uint256"
                                                        }
                                                      }
                                                    ],
                                                    "id": 8325,
                                                    "isConstant": false,
                                                    "isInlineArray": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "nodeType": "TupleExpression",
                                                    "src": "14466:16:35",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_uint256",
                                                      "typeString": "uint256"
                                                    }
                                                  },
                                                  "src": "14462:20:35",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                  }
                                                }
                                              ],
                                              "id": 8327,
                                              "isConstant": false,
                                              "isInlineArray": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "nodeType": "TupleExpression",
                                              "src": "14461:22:35",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            },
                                            "src": "14458:25:35",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "nodeType": "BinaryOperation",
                                          "operator": "-",
                                          "rightExpression": {
                                            "argumentTypes": null,
                                            "hexValue": "31",
                                            "id": 8329,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "number",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "14486:1:35",
                                            "subdenomination": null,
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_rational_1_by_1",
                                              "typeString": "int_const 1"
                                            },
                                            "value": "1"
                                          },
                                          "src": "14458:29:35",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        }
                                      ],
                                      "id": 8331,
                                      "isConstant": false,
                                      "isInlineArray": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "TupleExpression",
                                      "src": "14457:31:35",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 8319,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "14448:7:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_bytes32_$",
                                    "typeString": "type(bytes32)"
                                  },
                                  "typeName": "bytes32"
                                },
                                "id": 8333,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "14448:41:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "14433:56:35"
                            },
                            {
                              "assignments": [],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 8336,
                                  "name": "needledata",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 8412,
                                  "src": "14500:18:35",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  "typeName": {
                                    "id": 8335,
                                    "name": "bytes32",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "14500:7:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                }
                              ],
                              "id": 8337,
                              "initialValue": null,
                              "nodeType": "VariableDeclarationStatement",
                              "src": "14500:18:35"
                            },
                            {
                              "externalReferences": [
                                {
                                  "needleptr": {
                                    "declaration": 8299,
                                    "isOffset": false,
                                    "isSlot": false,
                                    "src": "14573:9:35",
                                    "valueSize": 1
                                  }
                                },
                                {
                                  "needledata": {
                                    "declaration": 8336,
                                    "isOffset": false,
                                    "isSlot": false,
                                    "src": "14549:10:35",
                                    "valueSize": 1
                                  }
                                },
                                {
                                  "mask": {
                                    "declaration": 8318,
                                    "isOffset": false,
                                    "isSlot": false,
                                    "src": "14585:4:35",
                                    "valueSize": 1
                                  }
                                }
                              ],
                              "id": 8338,
                              "nodeType": "InlineAssembly",
                              "operations": "{\n    needledata := and(mload(needleptr), mask)\n}",
                              "src": "14528:89:35"
                            },
                            {
                              "assignments": [
                                8340
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 8340,
                                  "name": "end",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 8412,
                                  "src": "14610:11:35",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "typeName": {
                                    "id": 8339,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "14610:7:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                }
                              ],
                              "id": 8346,
                              "initialValue": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 8345,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 8343,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "id": 8341,
                                    "name": "selfptr",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8295,
                                    "src": "14624:7:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "+",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "id": 8342,
                                    "name": "selflen",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8293,
                                    "src": "14634:7:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "14624:17:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "-",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "id": 8344,
                                  "name": "needlelen",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8297,
                                  "src": "14644:9:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "14624:29:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "14610:43:35"
                            },
                            {
                              "assignments": [],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 8348,
                                  "name": "ptrdata",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 8412,
                                  "src": "14663:15:35",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  "typeName": {
                                    "id": 8347,
                                    "name": "bytes32",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "14663:7:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                }
                              ],
                              "id": 8349,
                              "initialValue": null,
                              "nodeType": "VariableDeclarationStatement",
                              "src": "14663:15:35"
                            },
                            {
                              "externalReferences": [
                                {
                                  "ptr": {
                                    "declaration": 8305,
                                    "isOffset": false,
                                    "isSlot": false,
                                    "src": "14730:3:35",
                                    "valueSize": 1
                                  }
                                },
                                {
                                  "ptrdata": {
                                    "declaration": 8348,
                                    "isOffset": false,
                                    "isSlot": false,
                                    "src": "14709:7:35",
                                    "valueSize": 1
                                  }
                                },
                                {
                                  "mask": {
                                    "declaration": 8318,
                                    "isOffset": false,
                                    "isSlot": false,
                                    "src": "14736:4:35",
                                    "valueSize": 1
                                  }
                                }
                              ],
                              "id": 8350,
                              "nodeType": "InlineAssembly",
                              "operations": "{\n    ptrdata := and(mload(ptr), mask)\n}",
                              "src": "14688:78:35"
                            },
                            {
                              "body": {
                                "id": 8366,
                                "nodeType": "Block",
                                "src": "14791:158:35",
                                "statements": [
                                  {
                                    "condition": {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 8356,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "argumentTypes": null,
                                        "id": 8354,
                                        "name": "ptr",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 8305,
                                        "src": "14807:3:35",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": ">=",
                                      "rightExpression": {
                                        "argumentTypes": null,
                                        "id": 8355,
                                        "name": "end",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 8340,
                                        "src": "14814:3:35",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "14807:10:35",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "falseBody": null,
                                    "id": 8361,
                                    "nodeType": "IfStatement",
                                    "src": "14803:40:35",
                                    "trueBody": {
                                      "expression": {
                                        "argumentTypes": null,
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 8359,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "argumentTypes": null,
                                          "id": 8357,
                                          "name": "selfptr",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 8295,
                                          "src": "14826:7:35",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "+",
                                        "rightExpression": {
                                          "argumentTypes": null,
                                          "id": 8358,
                                          "name": "selflen",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 8293,
                                          "src": "14836:7:35",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "src": "14826:17:35",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "functionReturnParameters": 8303,
                                      "id": 8360,
                                      "nodeType": "Return",
                                      "src": "14819:24:35"
                                    }
                                  },
                                  {
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 8363,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "UnaryOperation",
                                      "operator": "++",
                                      "prefix": false,
                                      "src": "14855:5:35",
                                      "subExpression": {
                                        "argumentTypes": null,
                                        "id": 8362,
                                        "name": "ptr",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 8305,
                                        "src": "14855:3:35",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 8364,
                                    "nodeType": "ExpressionStatement",
                                    "src": "14855:5:35"
                                  },
                                  {
                                    "externalReferences": [
                                      {
                                        "ptr": {
                                          "declaration": 8305,
                                          "isOffset": false,
                                          "isSlot": false,
                                          "src": "14916:3:35",
                                          "valueSize": 1
                                        }
                                      },
                                      {
                                        "ptrdata": {
                                          "declaration": 8348,
                                          "isOffset": false,
                                          "isSlot": false,
                                          "src": "14895:7:35",
                                          "valueSize": 1
                                        }
                                      },
                                      {
                                        "mask": {
                                          "declaration": 8318,
                                          "isOffset": false,
                                          "isSlot": false,
                                          "src": "14922:4:35",
                                          "valueSize": 1
                                        }
                                      }
                                    ],
                                    "id": 8365,
                                    "nodeType": "InlineAssembly",
                                    "operations": "{\n    ptrdata := and(mload(ptr), mask)\n}",
                                    "src": "14872:77:35"
                                  }
                                ]
                              },
                              "condition": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                "id": 8353,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "id": 8351,
                                  "name": "ptrdata",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8348,
                                  "src": "14768:7:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "!=",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "id": 8352,
                                  "name": "needledata",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8336,
                                  "src": "14779:10:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "src": "14768:21:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 8367,
                              "nodeType": "WhileStatement",
                              "src": "14761:188:35"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 8368,
                                "name": "ptr",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8305,
                                "src": "14965:3:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "functionReturnParameters": 8303,
                              "id": 8369,
                              "nodeType": "Return",
                              "src": "14958:10:35"
                            }
                          ]
                        }
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 8409,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 8407,
                      "name": "selfptr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8295,
                      "src": "15397:7:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "+",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 8408,
                      "name": "selflen",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8293,
                      "src": "15407:7:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "15397:17:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 8303,
                  "id": 8410,
                  "nodeType": "Return",
                  "src": "15390:24:35"
                }
              ]
            },
            "documentation": null,
            "id": 8412,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "findPtr",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8300,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8293,
                  "name": "selflen",
                  "nodeType": "VariableDeclaration",
                  "scope": 8412,
                  "src": "14199:15:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8292,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "14199:7:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8295,
                  "name": "selfptr",
                  "nodeType": "VariableDeclaration",
                  "scope": 8412,
                  "src": "14220:15:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8294,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "14220:7:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8297,
                  "name": "needlelen",
                  "nodeType": "VariableDeclaration",
                  "scope": 8412,
                  "src": "14241:17:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8296,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "14241:7:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8299,
                  "name": "needleptr",
                  "nodeType": "VariableDeclaration",
                  "scope": 8412,
                  "src": "14264:17:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8298,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "14264:7:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "14193:92:35"
            },
            "payable": false,
            "returnParameters": {
              "id": 8303,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8302,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8412,
                  "src": "14308:7:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8301,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "14308:7:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "14307:9:35"
            },
            "scope": 9026,
            "src": "14177:1242:35",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "private"
          },
          {
            "body": {
              "id": 8528,
              "nodeType": "Block",
              "src": "15707:1095:35",
              "statements": [
                {
                  "assignments": [],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8426,
                      "name": "ptr",
                      "nodeType": "VariableDeclaration",
                      "scope": 8529,
                      "src": "15713:11:35",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8425,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "15713:7:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8427,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "15713:11:35"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 8430,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 8428,
                      "name": "needlelen",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8418,
                      "src": "15735:9:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 8429,
                      "name": "selflen",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8414,
                      "src": "15748:7:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "15735:20:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 8525,
                  "nodeType": "IfStatement",
                  "src": "15731:1047:35",
                  "trueBody": {
                    "id": 8524,
                    "nodeType": "Block",
                    "src": "15757:1021:35",
                    "statements": [
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 8433,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 8431,
                            "name": "needlelen",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8418,
                            "src": "15769:9:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "3332",
                            "id": 8432,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "15782:2:35",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_32_by_1",
                              "typeString": "int_const 32"
                            },
                            "value": "32"
                          },
                          "src": "15769:15:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 8522,
                          "nodeType": "Block",
                          "src": "16344:428:35",
                          "statements": [
                            {
                              "assignments": [],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 8489,
                                  "name": "hash",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 8529,
                                  "src": "16395:12:35",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  "typeName": {
                                    "id": 8488,
                                    "name": "bytes32",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "16395:7:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                }
                              ],
                              "id": 8490,
                              "initialValue": null,
                              "nodeType": "VariableDeclarationStatement",
                              "src": "16395:12:35"
                            },
                            {
                              "externalReferences": [
                                {
                                  "hash": {
                                    "declaration": 8489,
                                    "isOffset": false,
                                    "isSlot": false,
                                    "src": "16438:4:35",
                                    "valueSize": 1
                                  }
                                },
                                {
                                  "needleptr": {
                                    "declaration": 8420,
                                    "isOffset": false,
                                    "isSlot": false,
                                    "src": "16456:9:35",
                                    "valueSize": 1
                                  }
                                },
                                {
                                  "needlelen": {
                                    "declaration": 8418,
                                    "isOffset": false,
                                    "isSlot": false,
                                    "src": "16467:9:35",
                                    "valueSize": 1
                                  }
                                }
                              ],
                              "id": 8491,
                              "nodeType": "InlineAssembly",
                              "operations": "{\n    hash := keccak256(needleptr, needlelen)\n}",
                              "src": "16417:82:35"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 8499,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 8492,
                                  "name": "ptr",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8426,
                                  "src": "16496:3:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 8498,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "id": 8493,
                                    "name": "selfptr",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8416,
                                    "src": "16502:7:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "+",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "components": [
                                      {
                                        "argumentTypes": null,
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 8496,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "argumentTypes": null,
                                          "id": 8494,
                                          "name": "selflen",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 8414,
                                          "src": "16513:7:35",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "-",
                                        "rightExpression": {
                                          "argumentTypes": null,
                                          "id": 8495,
                                          "name": "needlelen",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 8418,
                                          "src": "16523:9:35",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "src": "16513:19:35",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "id": 8497,
                                    "isConstant": false,
                                    "isInlineArray": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "TupleExpression",
                                    "src": "16512:21:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "16502:31:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "16496:37:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 8500,
                              "nodeType": "ExpressionStatement",
                              "src": "16496:37:35"
                            },
                            {
                              "body": {
                                "id": 8520,
                                "nodeType": "Block",
                                "src": "16566:198:35",
                                "statements": [
                                  {
                                    "assignments": [],
                                    "declarations": [
                                      {
                                        "constant": false,
                                        "id": 8505,
                                        "name": "testHash",
                                        "nodeType": "VariableDeclaration",
                                        "scope": 8529,
                                        "src": "16578:16:35",
                                        "stateVariable": false,
                                        "storageLocation": "default",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        },
                                        "typeName": {
                                          "id": 8504,
                                          "name": "bytes32",
                                          "nodeType": "ElementaryTypeName",
                                          "src": "16578:7:35",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                          }
                                        },
                                        "value": null,
                                        "visibility": "internal"
                                      }
                                    ],
                                    "id": 8506,
                                    "initialValue": null,
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "16578:16:35"
                                  },
                                  {
                                    "externalReferences": [
                                      {
                                        "testHash": {
                                          "declaration": 8505,
                                          "isOffset": false,
                                          "isSlot": false,
                                          "src": "16629:8:35",
                                          "valueSize": 1
                                        }
                                      },
                                      {
                                        "ptr": {
                                          "declaration": 8426,
                                          "isOffset": false,
                                          "isSlot": false,
                                          "src": "16651:3:35",
                                          "valueSize": 1
                                        }
                                      },
                                      {
                                        "needlelen": {
                                          "declaration": 8418,
                                          "isOffset": false,
                                          "isSlot": false,
                                          "src": "16656:9:35",
                                          "valueSize": 1
                                        }
                                      }
                                    ],
                                    "id": 8507,
                                    "nodeType": "InlineAssembly",
                                    "operations": "{\n    testHash := keccak256(ptr, needlelen)\n}",
                                    "src": "16606:85:35"
                                  },
                                  {
                                    "condition": {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      },
                                      "id": 8510,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "argumentTypes": null,
                                        "id": 8508,
                                        "name": "hash",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 8489,
                                        "src": "16693:4:35",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "==",
                                      "rightExpression": {
                                        "argumentTypes": null,
                                        "id": 8509,
                                        "name": "testHash",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 8505,
                                        "src": "16701:8:35",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        }
                                      },
                                      "src": "16693:16:35",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "falseBody": null,
                                    "id": 8515,
                                    "nodeType": "IfStatement",
                                    "src": "16689:44:35",
                                    "trueBody": {
                                      "expression": {
                                        "argumentTypes": null,
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 8513,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "argumentTypes": null,
                                          "id": 8511,
                                          "name": "ptr",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 8426,
                                          "src": "16718:3:35",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "+",
                                        "rightExpression": {
                                          "argumentTypes": null,
                                          "id": 8512,
                                          "name": "needlelen",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 8418,
                                          "src": "16724:9:35",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "src": "16718:15:35",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "functionReturnParameters": 8424,
                                      "id": 8514,
                                      "nodeType": "Return",
                                      "src": "16711:22:35"
                                    }
                                  },
                                  {
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 8518,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "argumentTypes": null,
                                        "id": 8516,
                                        "name": "ptr",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 8426,
                                        "src": "16745:3:35",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "-=",
                                      "rightHandSide": {
                                        "argumentTypes": null,
                                        "hexValue": "31",
                                        "id": 8517,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "16752:1:35",
                                        "subdenomination": null,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_1_by_1",
                                          "typeString": "int_const 1"
                                        },
                                        "value": "1"
                                      },
                                      "src": "16745:8:35",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 8519,
                                    "nodeType": "ExpressionStatement",
                                    "src": "16745:8:35"
                                  }
                                ]
                              },
                              "condition": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 8503,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "id": 8501,
                                  "name": "ptr",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8426,
                                  "src": "16550:3:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">=",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "id": 8502,
                                  "name": "selfptr",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8416,
                                  "src": "16557:7:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "16550:14:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 8521,
                              "nodeType": "WhileStatement",
                              "src": "16543:221:35"
                            }
                          ]
                        },
                        "id": 8523,
                        "nodeType": "IfStatement",
                        "src": "15765:1007:35",
                        "trueBody": {
                          "id": 8487,
                          "nodeType": "Block",
                          "src": "15786:552:35",
                          "statements": [
                            {
                              "assignments": [
                                8435
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 8435,
                                  "name": "mask",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 8529,
                                  "src": "15796:12:35",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  "typeName": {
                                    "id": 8434,
                                    "name": "bytes32",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "15796:7:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                }
                              ],
                              "id": 8451,
                              "initialValue": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 8449,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "UnaryOperation",
                                    "operator": "~",
                                    "prefix": true,
                                    "src": "15819:32:35",
                                    "subExpression": {
                                      "argumentTypes": null,
                                      "components": [
                                        {
                                          "argumentTypes": null,
                                          "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          "id": 8447,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "leftExpression": {
                                            "argumentTypes": null,
                                            "commonType": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            },
                                            "id": 8445,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "leftExpression": {
                                              "argumentTypes": null,
                                              "hexValue": "32",
                                              "id": 8437,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "kind": "number",
                                              "lValueRequested": false,
                                              "nodeType": "Literal",
                                              "src": "15821:1:35",
                                              "subdenomination": null,
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_rational_2_by_1",
                                                "typeString": "int_const 2"
                                              },
                                              "value": "2"
                                            },
                                            "nodeType": "BinaryOperation",
                                            "operator": "**",
                                            "rightExpression": {
                                              "argumentTypes": null,
                                              "components": [
                                                {
                                                  "argumentTypes": null,
                                                  "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                  },
                                                  "id": 8443,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "lValueRequested": false,
                                                  "leftExpression": {
                                                    "argumentTypes": null,
                                                    "hexValue": "38",
                                                    "id": 8438,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "kind": "number",
                                                    "lValueRequested": false,
                                                    "nodeType": "Literal",
                                                    "src": "15825:1:35",
                                                    "subdenomination": null,
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_rational_8_by_1",
                                                      "typeString": "int_const 8"
                                                    },
                                                    "value": "8"
                                                  },
                                                  "nodeType": "BinaryOperation",
                                                  "operator": "*",
                                                  "rightExpression": {
                                                    "argumentTypes": null,
                                                    "components": [
                                                      {
                                                        "argumentTypes": null,
                                                        "commonType": {
                                                          "typeIdentifier": "t_uint256",
                                                          "typeString": "uint256"
                                                        },
                                                        "id": 8441,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "leftExpression": {
                                                          "argumentTypes": null,
                                                          "hexValue": "3332",
                                                          "id": 8439,
                                                          "isConstant": false,
                                                          "isLValue": false,
                                                          "isPure": true,
                                                          "kind": "number",
                                                          "lValueRequested": false,
                                                          "nodeType": "Literal",
                                                          "src": "15830:2:35",
                                                          "subdenomination": null,
                                                          "typeDescriptions": {
                                                            "typeIdentifier": "t_rational_32_by_1",
                                                            "typeString": "int_const 32"
                                                          },
                                                          "value": "32"
                                                        },
                                                        "nodeType": "BinaryOperation",
                                                        "operator": "-",
                                                        "rightExpression": {
                                                          "argumentTypes": null,
                                                          "id": 8440,
                                                          "name": "needlelen",
                                                          "nodeType": "Identifier",
                                                          "overloadedDeclarations": [],
                                                          "referencedDeclaration": 8418,
                                                          "src": "15835:9:35",
                                                          "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                          }
                                                        },
                                                        "src": "15830:14:35",
                                                        "typeDescriptions": {
                                                          "typeIdentifier": "t_uint256",
                                                          "typeString": "uint256"
                                                        }
                                                      }
                                                    ],
                                                    "id": 8442,
                                                    "isConstant": false,
                                                    "isInlineArray": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "nodeType": "TupleExpression",
                                                    "src": "15829:16:35",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_uint256",
                                                      "typeString": "uint256"
                                                    }
                                                  },
                                                  "src": "15825:20:35",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                  }
                                                }
                                              ],
                                              "id": 8444,
                                              "isConstant": false,
                                              "isInlineArray": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "nodeType": "TupleExpression",
                                              "src": "15824:22:35",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            },
                                            "src": "15821:25:35",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "nodeType": "BinaryOperation",
                                          "operator": "-",
                                          "rightExpression": {
                                            "argumentTypes": null,
                                            "hexValue": "31",
                                            "id": 8446,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "number",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "15849:1:35",
                                            "subdenomination": null,
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_rational_1_by_1",
                                              "typeString": "int_const 1"
                                            },
                                            "value": "1"
                                          },
                                          "src": "15821:29:35",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        }
                                      ],
                                      "id": 8448,
                                      "isConstant": false,
                                      "isInlineArray": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "TupleExpression",
                                      "src": "15820:31:35",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 8436,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "15811:7:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_bytes32_$",
                                    "typeString": "type(bytes32)"
                                  },
                                  "typeName": "bytes32"
                                },
                                "id": 8450,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "15811:41:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "15796:56:35"
                            },
                            {
                              "assignments": [],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 8453,
                                  "name": "needledata",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 8529,
                                  "src": "15863:18:35",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  "typeName": {
                                    "id": 8452,
                                    "name": "bytes32",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "15863:7:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                }
                              ],
                              "id": 8454,
                              "initialValue": null,
                              "nodeType": "VariableDeclarationStatement",
                              "src": "15863:18:35"
                            },
                            {
                              "externalReferences": [
                                {
                                  "needleptr": {
                                    "declaration": 8420,
                                    "isOffset": false,
                                    "isSlot": false,
                                    "src": "15936:9:35",
                                    "valueSize": 1
                                  }
                                },
                                {
                                  "needledata": {
                                    "declaration": 8453,
                                    "isOffset": false,
                                    "isSlot": false,
                                    "src": "15912:10:35",
                                    "valueSize": 1
                                  }
                                },
                                {
                                  "mask": {
                                    "declaration": 8435,
                                    "isOffset": false,
                                    "isSlot": false,
                                    "src": "15948:4:35",
                                    "valueSize": 1
                                  }
                                }
                              ],
                              "id": 8455,
                              "nodeType": "InlineAssembly",
                              "operations": "{\n    needledata := and(mload(needleptr), mask)\n}",
                              "src": "15891:85:35"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 8462,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 8456,
                                  "name": "ptr",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8426,
                                  "src": "15973:3:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 8461,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 8459,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "argumentTypes": null,
                                      "id": 8457,
                                      "name": "selfptr",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 8416,
                                      "src": "15979:7:35",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "+",
                                    "rightExpression": {
                                      "argumentTypes": null,
                                      "id": 8458,
                                      "name": "selflen",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 8414,
                                      "src": "15989:7:35",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "15979:17:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "-",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "id": 8460,
                                    "name": "needlelen",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8418,
                                    "src": "15999:9:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "15979:29:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "15973:35:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 8463,
                              "nodeType": "ExpressionStatement",
                              "src": "15973:35:35"
                            },
                            {
                              "assignments": [],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 8465,
                                  "name": "ptrdata",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 8529,
                                  "src": "16018:15:35",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  "typeName": {
                                    "id": 8464,
                                    "name": "bytes32",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "16018:7:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                }
                              ],
                              "id": 8466,
                              "initialValue": null,
                              "nodeType": "VariableDeclarationStatement",
                              "src": "16018:15:35"
                            },
                            {
                              "externalReferences": [
                                {
                                  "ptr": {
                                    "declaration": 8426,
                                    "isOffset": false,
                                    "isSlot": false,
                                    "src": "16085:3:35",
                                    "valueSize": 1
                                  }
                                },
                                {
                                  "ptrdata": {
                                    "declaration": 8465,
                                    "isOffset": false,
                                    "isSlot": false,
                                    "src": "16064:7:35",
                                    "valueSize": 1
                                  }
                                },
                                {
                                  "mask": {
                                    "declaration": 8435,
                                    "isOffset": false,
                                    "isSlot": false,
                                    "src": "16091:4:35",
                                    "valueSize": 1
                                  }
                                }
                              ],
                              "id": 8467,
                              "nodeType": "InlineAssembly",
                              "operations": "{\n    ptrdata := and(mload(ptr), mask)\n}",
                              "src": "16043:78:35"
                            },
                            {
                              "body": {
                                "id": 8481,
                                "nodeType": "Block",
                                "src": "16146:152:35",
                                "statements": [
                                  {
                                    "condition": {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 8473,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "argumentTypes": null,
                                        "id": 8471,
                                        "name": "ptr",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 8426,
                                        "src": "16162:3:35",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "<=",
                                      "rightExpression": {
                                        "argumentTypes": null,
                                        "id": 8472,
                                        "name": "selfptr",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 8416,
                                        "src": "16169:7:35",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "16162:14:35",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "falseBody": null,
                                    "id": 8476,
                                    "nodeType": "IfStatement",
                                    "src": "16158:34:35",
                                    "trueBody": {
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 8474,
                                        "name": "selfptr",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 8416,
                                        "src": "16185:7:35",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "functionReturnParameters": 8424,
                                      "id": 8475,
                                      "nodeType": "Return",
                                      "src": "16178:14:35"
                                    }
                                  },
                                  {
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 8478,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "UnaryOperation",
                                      "operator": "--",
                                      "prefix": false,
                                      "src": "16204:5:35",
                                      "subExpression": {
                                        "argumentTypes": null,
                                        "id": 8477,
                                        "name": "ptr",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 8426,
                                        "src": "16204:3:35",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 8479,
                                    "nodeType": "ExpressionStatement",
                                    "src": "16204:5:35"
                                  },
                                  {
                                    "externalReferences": [
                                      {
                                        "ptr": {
                                          "declaration": 8426,
                                          "isOffset": false,
                                          "isSlot": false,
                                          "src": "16265:3:35",
                                          "valueSize": 1
                                        }
                                      },
                                      {
                                        "ptrdata": {
                                          "declaration": 8465,
                                          "isOffset": false,
                                          "isSlot": false,
                                          "src": "16244:7:35",
                                          "valueSize": 1
                                        }
                                      },
                                      {
                                        "mask": {
                                          "declaration": 8435,
                                          "isOffset": false,
                                          "isSlot": false,
                                          "src": "16271:4:35",
                                          "valueSize": 1
                                        }
                                      }
                                    ],
                                    "id": 8480,
                                    "nodeType": "InlineAssembly",
                                    "operations": "{\n    ptrdata := and(mload(ptr), mask)\n}",
                                    "src": "16221:77:35"
                                  }
                                ]
                              },
                              "condition": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                "id": 8470,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "id": 8468,
                                  "name": "ptrdata",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8465,
                                  "src": "16123:7:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "!=",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "id": 8469,
                                  "name": "needledata",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8453,
                                  "src": "16134:10:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "src": "16123:21:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 8482,
                              "nodeType": "WhileStatement",
                              "src": "16116:182:35"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 8485,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "id": 8483,
                                  "name": "ptr",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8426,
                                  "src": "16314:3:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "+",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "id": 8484,
                                  "name": "needlelen",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8418,
                                  "src": "16320:9:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "16314:15:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "functionReturnParameters": 8424,
                              "id": 8486,
                              "nodeType": "Return",
                              "src": "16307:22:35"
                            }
                          ]
                        }
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8526,
                    "name": "selfptr",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8416,
                    "src": "16790:7:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 8424,
                  "id": 8527,
                  "nodeType": "Return",
                  "src": "16783:14:35"
                }
              ]
            },
            "documentation": null,
            "id": 8529,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "rfindPtr",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8421,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8414,
                  "name": "selflen",
                  "nodeType": "VariableDeclaration",
                  "scope": 8529,
                  "src": "15589:15:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8413,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "15589:7:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8416,
                  "name": "selfptr",
                  "nodeType": "VariableDeclaration",
                  "scope": 8529,
                  "src": "15610:15:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8415,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "15610:7:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8418,
                  "name": "needlelen",
                  "nodeType": "VariableDeclaration",
                  "scope": 8529,
                  "src": "15631:17:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8417,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "15631:7:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8420,
                  "name": "needleptr",
                  "nodeType": "VariableDeclaration",
                  "scope": 8529,
                  "src": "15654:17:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8419,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "15654:7:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "15583:92:35"
            },
            "payable": false,
            "returnParameters": {
              "id": 8424,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8423,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8529,
                  "src": "15698:7:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8422,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "15698:7:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "15697:9:35"
            },
            "scope": 9026,
            "src": "15566:1236:35",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "private"
          },
          {
            "body": {
              "id": 8568,
              "nodeType": "Block",
              "src": "17225:152:35",
              "statements": [
                {
                  "assignments": [
                    8539
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8539,
                      "name": "ptr",
                      "nodeType": "VariableDeclaration",
                      "scope": 8569,
                      "src": "17231:11:35",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8538,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "17231:7:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8550,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8541,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8531,
                          "src": "17253:4:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                            "typeString": "struct StringUtils.slice memory"
                          }
                        },
                        "id": 8542,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7335,
                        "src": "17253:9:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8543,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8531,
                          "src": "17264:4:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                            "typeString": "struct StringUtils.slice memory"
                          }
                        },
                        "id": 8544,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_ptr",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7337,
                        "src": "17264:9:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8545,
                          "name": "needle",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8533,
                          "src": "17275:6:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                            "typeString": "struct StringUtils.slice memory"
                          }
                        },
                        "id": 8546,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7335,
                        "src": "17275:11:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8547,
                          "name": "needle",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8533,
                          "src": "17288:6:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                            "typeString": "struct StringUtils.slice memory"
                          }
                        },
                        "id": 8548,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_ptr",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7337,
                        "src": "17288:11:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 8540,
                      "name": "findPtr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8412,
                      "src": "17245:7:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256,uint256,uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 8549,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17245:55:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "17231:69:35"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8558,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 8551,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8531,
                        "src": "17306:4:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                          "typeString": "struct StringUtils.slice memory"
                        }
                      },
                      "id": 8553,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7335,
                      "src": "17306:9:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "-=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 8557,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 8554,
                        "name": "ptr",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8539,
                        "src": "17319:3:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "-",
                      "rightExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8555,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8531,
                          "src": "17325:4:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                            "typeString": "struct StringUtils.slice memory"
                          }
                        },
                        "id": 8556,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_ptr",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7337,
                        "src": "17325:9:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "17319:15:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "17306:28:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 8559,
                  "nodeType": "ExpressionStatement",
                  "src": "17306:28:35"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8564,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 8560,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8531,
                        "src": "17340:4:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                          "typeString": "struct StringUtils.slice memory"
                        }
                      },
                      "id": 8562,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "_ptr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7337,
                      "src": "17340:9:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 8563,
                      "name": "ptr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8539,
                      "src": "17352:3:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "17340:15:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 8565,
                  "nodeType": "ExpressionStatement",
                  "src": "17340:15:35"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8566,
                    "name": "self",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8531,
                    "src": "17368:4:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                      "typeString": "struct StringUtils.slice memory"
                    }
                  },
                  "functionReturnParameters": 8537,
                  "id": 8567,
                  "nodeType": "Return",
                  "src": "17361:11:35"
                }
              ]
            },
            "documentation": null,
            "id": 8569,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "find",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8534,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8531,
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 8569,
                  "src": "17134:17:35",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                    "typeString": "struct StringUtils.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8530,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7338,
                    "src": "17134:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$7338_storage_ptr",
                      "typeString": "struct StringUtils.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8533,
                  "name": "needle",
                  "nodeType": "VariableDeclaration",
                  "scope": 8569,
                  "src": "17153:19:35",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                    "typeString": "struct StringUtils.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8532,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7338,
                    "src": "17153:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$7338_storage_ptr",
                      "typeString": "struct StringUtils.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "17133:40:35"
            },
            "payable": false,
            "returnParameters": {
              "id": 8537,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8536,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8569,
                  "src": "17209:5:35",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                    "typeString": "struct StringUtils.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8535,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7338,
                    "src": "17209:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$7338_storage_ptr",
                      "typeString": "struct StringUtils.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "17208:14:35"
            },
            "scope": 9026,
            "src": "17120:257:35",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 8602,
              "nodeType": "Block",
              "src": "17824:131:35",
              "statements": [
                {
                  "assignments": [
                    8579
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8579,
                      "name": "ptr",
                      "nodeType": "VariableDeclaration",
                      "scope": 8603,
                      "src": "17830:11:35",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8578,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "17830:7:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8590,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8581,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8571,
                          "src": "17853:4:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                            "typeString": "struct StringUtils.slice memory"
                          }
                        },
                        "id": 8582,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7335,
                        "src": "17853:9:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8583,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8571,
                          "src": "17864:4:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                            "typeString": "struct StringUtils.slice memory"
                          }
                        },
                        "id": 8584,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_ptr",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7337,
                        "src": "17864:9:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8585,
                          "name": "needle",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8573,
                          "src": "17875:6:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                            "typeString": "struct StringUtils.slice memory"
                          }
                        },
                        "id": 8586,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7335,
                        "src": "17875:11:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8587,
                          "name": "needle",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8573,
                          "src": "17888:6:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                            "typeString": "struct StringUtils.slice memory"
                          }
                        },
                        "id": 8588,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_ptr",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7337,
                        "src": "17888:11:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 8580,
                      "name": "rfindPtr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8529,
                      "src": "17844:8:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256,uint256,uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 8589,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17844:56:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "17830:70:35"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8598,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 8591,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8571,
                        "src": "17906:4:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                          "typeString": "struct StringUtils.slice memory"
                        }
                      },
                      "id": 8593,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7335,
                      "src": "17906:9:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 8597,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 8594,
                        "name": "ptr",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8579,
                        "src": "17918:3:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "-",
                      "rightExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8595,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8571,
                          "src": "17924:4:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                            "typeString": "struct StringUtils.slice memory"
                          }
                        },
                        "id": 8596,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_ptr",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7337,
                        "src": "17924:9:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "17918:15:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "17906:27:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 8599,
                  "nodeType": "ExpressionStatement",
                  "src": "17906:27:35"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8600,
                    "name": "self",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8571,
                    "src": "17946:4:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                      "typeString": "struct StringUtils.slice memory"
                    }
                  },
                  "functionReturnParameters": 8577,
                  "id": 8601,
                  "nodeType": "Return",
                  "src": "17939:11:35"
                }
              ]
            },
            "documentation": null,
            "id": 8603,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "rfind",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8574,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8571,
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 8603,
                  "src": "17733:17:35",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                    "typeString": "struct StringUtils.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8570,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7338,
                    "src": "17733:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$7338_storage_ptr",
                      "typeString": "struct StringUtils.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8573,
                  "name": "needle",
                  "nodeType": "VariableDeclaration",
                  "scope": 8603,
                  "src": "17752:19:35",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                    "typeString": "struct StringUtils.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8572,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7338,
                    "src": "17752:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$7338_storage_ptr",
                      "typeString": "struct StringUtils.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "17732:40:35"
            },
            "payable": false,
            "returnParameters": {
              "id": 8577,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8576,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8603,
                  "src": "17808:5:35",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                    "typeString": "struct StringUtils.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8575,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7338,
                    "src": "17808:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$7338_storage_ptr",
                      "typeString": "struct StringUtils.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "17807:14:35"
            },
            "scope": 9026,
            "src": "17718:237:35",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 8680,
              "nodeType": "Block",
              "src": "18567:341:35",
              "statements": [
                {
                  "assignments": [
                    8615
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8615,
                      "name": "ptr",
                      "nodeType": "VariableDeclaration",
                      "scope": 8681,
                      "src": "18573:11:35",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8614,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "18573:7:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8626,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8617,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8605,
                          "src": "18595:4:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                            "typeString": "struct StringUtils.slice memory"
                          }
                        },
                        "id": 8618,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7335,
                        "src": "18595:9:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8619,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8605,
                          "src": "18606:4:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                            "typeString": "struct StringUtils.slice memory"
                          }
                        },
                        "id": 8620,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_ptr",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7337,
                        "src": "18606:9:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8621,
                          "name": "needle",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8607,
                          "src": "18617:6:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                            "typeString": "struct StringUtils.slice memory"
                          }
                        },
                        "id": 8622,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7335,
                        "src": "18617:11:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8623,
                          "name": "needle",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8607,
                          "src": "18630:6:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                            "typeString": "struct StringUtils.slice memory"
                          }
                        },
                        "id": 8624,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_ptr",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7337,
                        "src": "18630:11:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 8616,
                      "name": "findPtr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8412,
                      "src": "18587:7:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256,uint256,uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 8625,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18587:55:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "18573:69:35"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8632,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 8627,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8609,
                        "src": "18648:5:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                          "typeString": "struct StringUtils.slice memory"
                        }
                      },
                      "id": 8629,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "_ptr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7337,
                      "src": "18648:10:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 8630,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8605,
                        "src": "18661:4:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                          "typeString": "struct StringUtils.slice memory"
                        }
                      },
                      "id": 8631,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_ptr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7337,
                      "src": "18661:9:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "18648:22:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 8633,
                  "nodeType": "ExpressionStatement",
                  "src": "18648:22:35"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8641,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 8634,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8609,
                        "src": "18676:5:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                          "typeString": "struct StringUtils.slice memory"
                        }
                      },
                      "id": 8636,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7335,
                      "src": "18676:10:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 8640,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 8637,
                        "name": "ptr",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8615,
                        "src": "18689:3:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "-",
                      "rightExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8638,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8605,
                          "src": "18695:4:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                            "typeString": "struct StringUtils.slice memory"
                          }
                        },
                        "id": 8639,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_ptr",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7337,
                        "src": "18695:9:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "18689:15:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "18676:28:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 8642,
                  "nodeType": "ExpressionStatement",
                  "src": "18676:28:35"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 8649,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 8643,
                      "name": "ptr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8615,
                      "src": "18714:3:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 8648,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8644,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8605,
                          "src": "18721:4:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                            "typeString": "struct StringUtils.slice memory"
                          }
                        },
                        "id": 8645,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_ptr",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7337,
                        "src": "18721:9:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "+",
                      "rightExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8646,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8605,
                          "src": "18733:4:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                            "typeString": "struct StringUtils.slice memory"
                          }
                        },
                        "id": 8647,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7335,
                        "src": "18733:9:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "18721:21:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "18714:28:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 8676,
                    "nodeType": "Block",
                    "src": "18797:89:35",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 8665,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 8657,
                              "name": "self",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8605,
                              "src": "18805:4:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                                "typeString": "struct StringUtils.slice memory"
                              }
                            },
                            "id": 8659,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "_len",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 7335,
                            "src": "18805:9:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "-=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 8664,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 8660,
                                "name": "token",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8609,
                                "src": "18818:5:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                                  "typeString": "struct StringUtils.slice memory"
                                }
                              },
                              "id": 8661,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "_len",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 7335,
                              "src": "18818:10:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "+",
                            "rightExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 8662,
                                "name": "needle",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8607,
                                "src": "18831:6:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                                  "typeString": "struct StringUtils.slice memory"
                                }
                              },
                              "id": 8663,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "_len",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 7335,
                              "src": "18831:11:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "18818:24:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "18805:37:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 8666,
                        "nodeType": "ExpressionStatement",
                        "src": "18805:37:35"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 8674,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 8667,
                              "name": "self",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8605,
                              "src": "18850:4:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                                "typeString": "struct StringUtils.slice memory"
                              }
                            },
                            "id": 8669,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "_ptr",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 7337,
                            "src": "18850:9:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 8673,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "id": 8670,
                              "name": "ptr",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8615,
                              "src": "18862:3:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "+",
                            "rightExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 8671,
                                "name": "needle",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8607,
                                "src": "18868:6:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                                  "typeString": "struct StringUtils.slice memory"
                                }
                              },
                              "id": 8672,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "_len",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 7335,
                              "src": "18868:11:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "18862:17:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "18850:29:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 8675,
                        "nodeType": "ExpressionStatement",
                        "src": "18850:29:35"
                      }
                    ]
                  },
                  "id": 8677,
                  "nodeType": "IfStatement",
                  "src": "18710:176:35",
                  "trueBody": {
                    "id": 8656,
                    "nodeType": "Block",
                    "src": "18744:47:35",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 8654,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 8650,
                              "name": "self",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8605,
                              "src": "18771:4:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                                "typeString": "struct StringUtils.slice memory"
                              }
                            },
                            "id": 8652,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "_len",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 7335,
                            "src": "18771:9:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 8653,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "18783:1:35",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "18771:13:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 8655,
                        "nodeType": "ExpressionStatement",
                        "src": "18771:13:35"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8678,
                    "name": "token",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8609,
                    "src": "18898:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                      "typeString": "struct StringUtils.slice memory"
                    }
                  },
                  "functionReturnParameters": 8613,
                  "id": 8679,
                  "nodeType": "Return",
                  "src": "18891:12:35"
                }
              ]
            },
            "documentation": null,
            "id": 8681,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "split",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8610,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8605,
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 8681,
                  "src": "18459:17:35",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                    "typeString": "struct StringUtils.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8604,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7338,
                    "src": "18459:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$7338_storage_ptr",
                      "typeString": "struct StringUtils.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8607,
                  "name": "needle",
                  "nodeType": "VariableDeclaration",
                  "scope": 8681,
                  "src": "18482:19:35",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                    "typeString": "struct StringUtils.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8606,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7338,
                    "src": "18482:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$7338_storage_ptr",
                      "typeString": "struct StringUtils.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8609,
                  "name": "token",
                  "nodeType": "VariableDeclaration",
                  "scope": 8681,
                  "src": "18507:18:35",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                    "typeString": "struct StringUtils.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8608,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7338,
                    "src": "18507:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$7338_storage_ptr",
                      "typeString": "struct StringUtils.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "18453:76:35"
            },
            "payable": false,
            "returnParameters": {
              "id": 8613,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8612,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8681,
                  "src": "18553:5:35",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                    "typeString": "struct StringUtils.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8611,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7338,
                    "src": "18553:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$7338_storage_ptr",
                      "typeString": "struct StringUtils.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "18552:14:35"
            },
            "scope": 9026,
            "src": "18439:469:35",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 8696,
              "nodeType": "Block",
              "src": "19471:37:35",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8691,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8683,
                        "src": "19483:4:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                          "typeString": "struct StringUtils.slice memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8692,
                        "name": "needle",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8685,
                        "src": "19489:6:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                          "typeString": "struct StringUtils.slice memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8693,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8688,
                        "src": "19497:5:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                          "typeString": "struct StringUtils.slice memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                          "typeString": "struct StringUtils.slice memory"
                        },
                        {
                          "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                          "typeString": "struct StringUtils.slice memory"
                        },
                        {
                          "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                          "typeString": "struct StringUtils.slice memory"
                        }
                      ],
                      "id": 8690,
                      "name": "split",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        8681,
                        8697
                      ],
                      "referencedDeclaration": 8681,
                      "src": "19477:5:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_struct$_slice_$7338_memory_ptr_$_t_struct$_slice_$7338_memory_ptr_$_t_struct$_slice_$7338_memory_ptr_$returns$_t_struct$_slice_$7338_memory_ptr_$",
                        "typeString": "function (struct StringUtils.slice memory,struct StringUtils.slice memory,struct StringUtils.slice memory) pure returns (struct StringUtils.slice memory)"
                      }
                    },
                    "id": 8694,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "19477:26:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                      "typeString": "struct StringUtils.slice memory"
                    }
                  },
                  "id": 8695,
                  "nodeType": "ExpressionStatement",
                  "src": "19477:26:35"
                }
              ]
            },
            "documentation": null,
            "id": 8697,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "split",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8686,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8683,
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 8697,
                  "src": "19374:17:35",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                    "typeString": "struct StringUtils.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8682,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7338,
                    "src": "19374:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$7338_storage_ptr",
                      "typeString": "struct StringUtils.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8685,
                  "name": "needle",
                  "nodeType": "VariableDeclaration",
                  "scope": 8697,
                  "src": "19393:19:35",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                    "typeString": "struct StringUtils.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8684,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7338,
                    "src": "19393:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$7338_storage_ptr",
                      "typeString": "struct StringUtils.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "19373:40:35"
            },
            "payable": false,
            "returnParameters": {
              "id": 8689,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8688,
                  "name": "token",
                  "nodeType": "VariableDeclaration",
                  "scope": 8697,
                  "src": "19449:18:35",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                    "typeString": "struct StringUtils.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8687,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7338,
                    "src": "19449:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$7338_storage_ptr",
                      "typeString": "struct StringUtils.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "19448:20:35"
            },
            "scope": 9026,
            "src": "19359:149:35",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 8765,
              "nodeType": "Block",
              "src": "20120:301:35",
              "statements": [
                {
                  "assignments": [
                    8709
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8709,
                      "name": "ptr",
                      "nodeType": "VariableDeclaration",
                      "scope": 8766,
                      "src": "20126:11:35",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8708,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "20126:7:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8720,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8711,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8699,
                          "src": "20149:4:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                            "typeString": "struct StringUtils.slice memory"
                          }
                        },
                        "id": 8712,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7335,
                        "src": "20149:9:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8713,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8699,
                          "src": "20160:4:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                            "typeString": "struct StringUtils.slice memory"
                          }
                        },
                        "id": 8714,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_ptr",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7337,
                        "src": "20160:9:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8715,
                          "name": "needle",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8701,
                          "src": "20171:6:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                            "typeString": "struct StringUtils.slice memory"
                          }
                        },
                        "id": 8716,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7335,
                        "src": "20171:11:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8717,
                          "name": "needle",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8701,
                          "src": "20184:6:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                            "typeString": "struct StringUtils.slice memory"
                          }
                        },
                        "id": 8718,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_ptr",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7337,
                        "src": "20184:11:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 8710,
                      "name": "rfindPtr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8529,
                      "src": "20140:8:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256,uint256,uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 8719,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "20140:56:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "20126:70:35"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8725,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 8721,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8703,
                        "src": "20202:5:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                          "typeString": "struct StringUtils.slice memory"
                        }
                      },
                      "id": 8723,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "_ptr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7337,
                      "src": "20202:10:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 8724,
                      "name": "ptr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8709,
                      "src": "20215:3:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "20202:16:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 8726,
                  "nodeType": "ExpressionStatement",
                  "src": "20202:16:35"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8738,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 8727,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8703,
                        "src": "20224:5:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                          "typeString": "struct StringUtils.slice memory"
                        }
                      },
                      "id": 8729,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7335,
                      "src": "20224:10:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 8737,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8730,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8699,
                          "src": "20237:4:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                            "typeString": "struct StringUtils.slice memory"
                          }
                        },
                        "id": 8731,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7335,
                        "src": "20237:9:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "-",
                      "rightExpression": {
                        "argumentTypes": null,
                        "components": [
                          {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 8735,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "id": 8732,
                              "name": "ptr",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8709,
                              "src": "20250:3:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "-",
                            "rightExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 8733,
                                "name": "self",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8699,
                                "src": "20256:4:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                                  "typeString": "struct StringUtils.slice memory"
                                }
                              },
                              "id": 8734,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "_ptr",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 7337,
                              "src": "20256:9:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "20250:15:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "id": 8736,
                        "isConstant": false,
                        "isInlineArray": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "TupleExpression",
                        "src": "20249:17:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "20237:29:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "20224:42:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 8739,
                  "nodeType": "ExpressionStatement",
                  "src": "20224:42:35"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 8743,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 8740,
                      "name": "ptr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8709,
                      "src": "20276:3:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 8741,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8699,
                        "src": "20283:4:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                          "typeString": "struct StringUtils.slice memory"
                        }
                      },
                      "id": 8742,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_ptr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7337,
                      "src": "20283:9:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "20276:16:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 8761,
                    "nodeType": "Block",
                    "src": "20347:52:35",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 8759,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 8751,
                              "name": "self",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8699,
                              "src": "20355:4:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                                "typeString": "struct StringUtils.slice memory"
                              }
                            },
                            "id": 8753,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "_len",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 7335,
                            "src": "20355:9:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "-=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 8758,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 8754,
                                "name": "token",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8703,
                                "src": "20368:5:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                                  "typeString": "struct StringUtils.slice memory"
                                }
                              },
                              "id": 8755,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "_len",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 7335,
                              "src": "20368:10:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "+",
                            "rightExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 8756,
                                "name": "needle",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8701,
                                "src": "20381:6:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                                  "typeString": "struct StringUtils.slice memory"
                                }
                              },
                              "id": 8757,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "_len",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 7335,
                              "src": "20381:11:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "20368:24:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "20355:37:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 8760,
                        "nodeType": "ExpressionStatement",
                        "src": "20355:37:35"
                      }
                    ]
                  },
                  "id": 8762,
                  "nodeType": "IfStatement",
                  "src": "20272:127:35",
                  "trueBody": {
                    "id": 8750,
                    "nodeType": "Block",
                    "src": "20294:47:35",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 8748,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 8744,
                              "name": "self",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8699,
                              "src": "20321:4:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                                "typeString": "struct StringUtils.slice memory"
                              }
                            },
                            "id": 8746,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "_len",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 7335,
                            "src": "20321:9:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 8747,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "20333:1:35",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "20321:13:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 8749,
                        "nodeType": "ExpressionStatement",
                        "src": "20321:13:35"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8763,
                    "name": "token",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8703,
                    "src": "20411:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                      "typeString": "struct StringUtils.slice memory"
                    }
                  },
                  "functionReturnParameters": 8707,
                  "id": 8764,
                  "nodeType": "Return",
                  "src": "20404:12:35"
                }
              ]
            },
            "documentation": null,
            "id": 8766,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "rsplit",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8704,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8699,
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 8766,
                  "src": "20012:17:35",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                    "typeString": "struct StringUtils.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8698,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7338,
                    "src": "20012:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$7338_storage_ptr",
                      "typeString": "struct StringUtils.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8701,
                  "name": "needle",
                  "nodeType": "VariableDeclaration",
                  "scope": 8766,
                  "src": "20035:19:35",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                    "typeString": "struct StringUtils.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8700,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7338,
                    "src": "20035:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$7338_storage_ptr",
                      "typeString": "struct StringUtils.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8703,
                  "name": "token",
                  "nodeType": "VariableDeclaration",
                  "scope": 8766,
                  "src": "20060:18:35",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                    "typeString": "struct StringUtils.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8702,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7338,
                    "src": "20060:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$7338_storage_ptr",
                      "typeString": "struct StringUtils.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "20006:76:35"
            },
            "payable": false,
            "returnParameters": {
              "id": 8707,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8706,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8766,
                  "src": "20106:5:35",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                    "typeString": "struct StringUtils.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8705,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7338,
                    "src": "20106:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$7338_storage_ptr",
                      "typeString": "struct StringUtils.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "20105:14:35"
            },
            "scope": 9026,
            "src": "19991:430:35",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 8781,
              "nodeType": "Block",
              "src": "20983:38:35",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8776,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8768,
                        "src": "20996:4:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                          "typeString": "struct StringUtils.slice memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8777,
                        "name": "needle",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8770,
                        "src": "21002:6:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                          "typeString": "struct StringUtils.slice memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8778,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8773,
                        "src": "21010:5:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                          "typeString": "struct StringUtils.slice memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                          "typeString": "struct StringUtils.slice memory"
                        },
                        {
                          "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                          "typeString": "struct StringUtils.slice memory"
                        },
                        {
                          "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                          "typeString": "struct StringUtils.slice memory"
                        }
                      ],
                      "id": 8775,
                      "name": "rsplit",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        8766,
                        8782
                      ],
                      "referencedDeclaration": 8766,
                      "src": "20989:6:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_struct$_slice_$7338_memory_ptr_$_t_struct$_slice_$7338_memory_ptr_$_t_struct$_slice_$7338_memory_ptr_$returns$_t_struct$_slice_$7338_memory_ptr_$",
                        "typeString": "function (struct StringUtils.slice memory,struct StringUtils.slice memory,struct StringUtils.slice memory) pure returns (struct StringUtils.slice memory)"
                      }
                    },
                    "id": 8779,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "20989:27:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                      "typeString": "struct StringUtils.slice memory"
                    }
                  },
                  "id": 8780,
                  "nodeType": "ExpressionStatement",
                  "src": "20989:27:35"
                }
              ]
            },
            "documentation": null,
            "id": 8782,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "rsplit",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8771,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8768,
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 8782,
                  "src": "20886:17:35",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                    "typeString": "struct StringUtils.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8767,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7338,
                    "src": "20886:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$7338_storage_ptr",
                      "typeString": "struct StringUtils.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8770,
                  "name": "needle",
                  "nodeType": "VariableDeclaration",
                  "scope": 8782,
                  "src": "20905:19:35",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                    "typeString": "struct StringUtils.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8769,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7338,
                    "src": "20905:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$7338_storage_ptr",
                      "typeString": "struct StringUtils.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "20885:40:35"
            },
            "payable": false,
            "returnParameters": {
              "id": 8774,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8773,
                  "name": "token",
                  "nodeType": "VariableDeclaration",
                  "scope": 8782,
                  "src": "20961:18:35",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                    "typeString": "struct StringUtils.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8772,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7338,
                    "src": "20961:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$7338_storage_ptr",
                      "typeString": "struct StringUtils.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "20960:20:35"
            },
            "scope": 9026,
            "src": "20870:151:35",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 8840,
              "nodeType": "Block",
              "src": "21381:275:35",
              "statements": [
                {
                  "assignments": [
                    8792
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8792,
                      "name": "ptr",
                      "nodeType": "VariableDeclaration",
                      "scope": 8841,
                      "src": "21387:11:35",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8791,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "21387:7:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8806,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 8805,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 8794,
                            "name": "self",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8784,
                            "src": "21415:4:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                              "typeString": "struct StringUtils.slice memory"
                            }
                          },
                          "id": 8795,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "_len",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 7335,
                          "src": "21415:9:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 8796,
                            "name": "self",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8784,
                            "src": "21426:4:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                              "typeString": "struct StringUtils.slice memory"
                            }
                          },
                          "id": 8797,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "_ptr",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 7337,
                          "src": "21426:9:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 8798,
                            "name": "needle",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8786,
                            "src": "21437:6:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                              "typeString": "struct StringUtils.slice memory"
                            }
                          },
                          "id": 8799,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "_len",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 7335,
                          "src": "21437:11:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 8800,
                            "name": "needle",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8786,
                            "src": "21450:6:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                              "typeString": "struct StringUtils.slice memory"
                            }
                          },
                          "id": 8801,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "_ptr",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 7337,
                          "src": "21450:11:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 8793,
                        "name": "findPtr",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8412,
                        "src": "21407:7:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                          "typeString": "function (uint256,uint256,uint256,uint256) pure returns (uint256)"
                        }
                      },
                      "id": 8802,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "21407:55:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "+",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 8803,
                        "name": "needle",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8786,
                        "src": "21465:6:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                          "typeString": "struct StringUtils.slice memory"
                        }
                      },
                      "id": 8804,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7335,
                      "src": "21465:11:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "21407:69:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "21387:89:35"
                },
                {
                  "body": {
                    "id": 8838,
                    "nodeType": "Block",
                    "src": "21519:133:35",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 8815,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "++",
                          "prefix": false,
                          "src": "21527:5:35",
                          "subExpression": {
                            "argumentTypes": null,
                            "id": 8814,
                            "name": "cnt",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8789,
                            "src": "21527:3:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 8816,
                        "nodeType": "ExpressionStatement",
                        "src": "21527:5:35"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 8836,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 8817,
                            "name": "ptr",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8792,
                            "src": "21540:3:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 8835,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 8826,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 8819,
                                      "name": "self",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 8784,
                                      "src": "21562:4:35",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                                        "typeString": "struct StringUtils.slice memory"
                                      }
                                    },
                                    "id": 8820,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "_len",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 7335,
                                    "src": "21562:9:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "-",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "components": [
                                      {
                                        "argumentTypes": null,
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 8824,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "argumentTypes": null,
                                          "id": 8821,
                                          "name": "ptr",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 8792,
                                          "src": "21575:3:35",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "-",
                                        "rightExpression": {
                                          "argumentTypes": null,
                                          "expression": {
                                            "argumentTypes": null,
                                            "id": 8822,
                                            "name": "self",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 8784,
                                            "src": "21581:4:35",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                                              "typeString": "struct StringUtils.slice memory"
                                            }
                                          },
                                          "id": 8823,
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "_ptr",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 7337,
                                          "src": "21581:9:35",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "src": "21575:15:35",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "id": 8825,
                                    "isConstant": false,
                                    "isInlineArray": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "TupleExpression",
                                    "src": "21574:17:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "21562:29:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 8827,
                                  "name": "ptr",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8792,
                                  "src": "21593:3:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 8828,
                                    "name": "needle",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8786,
                                    "src": "21598:6:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                                      "typeString": "struct StringUtils.slice memory"
                                    }
                                  },
                                  "id": 8829,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "_len",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 7335,
                                  "src": "21598:11:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 8830,
                                    "name": "needle",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8786,
                                    "src": "21611:6:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                                      "typeString": "struct StringUtils.slice memory"
                                    }
                                  },
                                  "id": 8831,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "_ptr",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 7337,
                                  "src": "21611:11:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 8818,
                                "name": "findPtr",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8412,
                                "src": "21554:7:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                  "typeString": "function (uint256,uint256,uint256,uint256) pure returns (uint256)"
                                }
                              },
                              "id": 8832,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "21554:69:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "+",
                            "rightExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 8833,
                                "name": "needle",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8786,
                                "src": "21634:6:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                                  "typeString": "struct StringUtils.slice memory"
                                }
                              },
                              "id": 8834,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "_len",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 7335,
                              "src": "21634:11:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "21554:91:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "21540:105:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 8837,
                        "nodeType": "ExpressionStatement",
                        "src": "21540:105:35"
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 8813,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 8807,
                      "name": "ptr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8792,
                      "src": "21489:3:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 8812,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8808,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8784,
                          "src": "21496:4:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                            "typeString": "struct StringUtils.slice memory"
                          }
                        },
                        "id": 8809,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_ptr",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7337,
                        "src": "21496:9:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "+",
                      "rightExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8810,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8784,
                          "src": "21508:4:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                            "typeString": "struct StringUtils.slice memory"
                          }
                        },
                        "id": 8811,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7335,
                        "src": "21508:9:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "21496:21:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "21489:28:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 8839,
                  "nodeType": "WhileStatement",
                  "src": "21482:170:35"
                }
              ]
            },
            "documentation": null,
            "id": 8841,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "count",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8787,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8784,
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 8841,
                  "src": "21291:17:35",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                    "typeString": "struct StringUtils.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8783,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7338,
                    "src": "21291:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$7338_storage_ptr",
                      "typeString": "struct StringUtils.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8786,
                  "name": "needle",
                  "nodeType": "VariableDeclaration",
                  "scope": 8841,
                  "src": "21310:19:35",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                    "typeString": "struct StringUtils.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8785,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7338,
                    "src": "21310:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$7338_storage_ptr",
                      "typeString": "struct StringUtils.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "21290:40:35"
            },
            "payable": false,
            "returnParameters": {
              "id": 8790,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8789,
                  "name": "cnt",
                  "nodeType": "VariableDeclaration",
                  "scope": 8841,
                  "src": "21366:11:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8788,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "21366:7:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "21365:13:35"
            },
            "scope": 9026,
            "src": "21276:380:35",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 8864,
              "nodeType": "Block",
              "src": "21982:93:35",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 8862,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 8851,
                            "name": "self",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8843,
                            "src": "22010:4:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                              "typeString": "struct StringUtils.slice memory"
                            }
                          },
                          "id": 8852,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "_len",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 7335,
                          "src": "22010:9:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 8853,
                            "name": "self",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8843,
                            "src": "22021:4:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                              "typeString": "struct StringUtils.slice memory"
                            }
                          },
                          "id": 8854,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "_ptr",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 7337,
                          "src": "22021:9:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 8855,
                            "name": "needle",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8845,
                            "src": "22032:6:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                              "typeString": "struct StringUtils.slice memory"
                            }
                          },
                          "id": 8856,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "_len",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 7335,
                          "src": "22032:11:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 8857,
                            "name": "needle",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8845,
                            "src": "22045:6:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                              "typeString": "struct StringUtils.slice memory"
                            }
                          },
                          "id": 8858,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "_ptr",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 7337,
                          "src": "22045:11:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 8850,
                        "name": "rfindPtr",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8529,
                        "src": "22001:8:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                          "typeString": "function (uint256,uint256,uint256,uint256) pure returns (uint256)"
                        }
                      },
                      "id": 8859,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "22001:56:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 8860,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8843,
                        "src": "22061:4:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                          "typeString": "struct StringUtils.slice memory"
                        }
                      },
                      "id": 8861,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_ptr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7337,
                      "src": "22061:9:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "22001:69:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 8849,
                  "id": 8863,
                  "nodeType": "Return",
                  "src": "21988:82:35"
                }
              ]
            },
            "documentation": null,
            "id": 8865,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "contains",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8846,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8843,
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 8865,
                  "src": "21899:17:35",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                    "typeString": "struct StringUtils.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8842,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7338,
                    "src": "21899:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$7338_storage_ptr",
                      "typeString": "struct StringUtils.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8845,
                  "name": "needle",
                  "nodeType": "VariableDeclaration",
                  "scope": 8865,
                  "src": "21918:19:35",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                    "typeString": "struct StringUtils.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8844,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7338,
                    "src": "21918:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$7338_storage_ptr",
                      "typeString": "struct StringUtils.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "21898:40:35"
            },
            "payable": false,
            "returnParameters": {
              "id": 8849,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8848,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8865,
                  "src": "21974:4:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 8847,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "21974:4:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "21973:6:35"
            },
            "scope": 9026,
            "src": "21881:194:35",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 8910,
              "nodeType": "Block",
              "src": "22453:249:35",
              "statements": [
                {
                  "assignments": [
                    8875
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8875,
                      "name": "ret",
                      "nodeType": "VariableDeclaration",
                      "scope": 8911,
                      "src": "22459:17:35",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string"
                      },
                      "typeName": {
                        "id": 8874,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "22459:6:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage_ptr",
                          "typeString": "string"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8884,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 8882,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 8878,
                            "name": "self",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8867,
                            "src": "22490:4:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                              "typeString": "struct StringUtils.slice memory"
                            }
                          },
                          "id": 8879,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "_len",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 7335,
                          "src": "22490:9:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "+",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 8880,
                            "name": "other",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8869,
                            "src": "22502:5:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                              "typeString": "struct StringUtils.slice memory"
                            }
                          },
                          "id": 8881,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "_len",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 7335,
                          "src": "22502:10:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "22490:22:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 8877,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "22479:10:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_string_memory_$",
                        "typeString": "function (uint256) pure returns (string memory)"
                      },
                      "typeName": {
                        "id": 8876,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "22483:6:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage_ptr",
                          "typeString": "string"
                        }
                      }
                    },
                    "id": 8883,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "22479:34:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_memory",
                      "typeString": "string memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "22459:54:35"
                },
                {
                  "assignments": [],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8886,
                      "name": "retptr",
                      "nodeType": "VariableDeclaration",
                      "scope": 8911,
                      "src": "22519:14:35",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8885,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "22519:7:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8887,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "22519:14:35"
                },
                {
                  "externalReferences": [
                    {
                      "retptr": {
                        "declaration": 8886,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "22556:6:35",
                        "valueSize": 1
                      }
                    },
                    {
                      "ret": {
                        "declaration": 8875,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "22570:3:35",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 8888,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    retptr := add(ret, 32)\n}",
                  "src": "22539:56:35"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8890,
                        "name": "retptr",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8886,
                        "src": "22596:6:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8891,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8867,
                          "src": "22604:4:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                            "typeString": "struct StringUtils.slice memory"
                          }
                        },
                        "id": 8892,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_ptr",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7337,
                        "src": "22604:9:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8893,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8867,
                          "src": "22615:4:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                            "typeString": "struct StringUtils.slice memory"
                          }
                        },
                        "id": 8894,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7335,
                        "src": "22615:9:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 8889,
                      "name": "memcpy",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7378,
                      "src": "22589:6:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (uint256,uint256,uint256) pure"
                      }
                    },
                    "id": 8895,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "22589:36:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8896,
                  "nodeType": "ExpressionStatement",
                  "src": "22589:36:35"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 8901,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 8898,
                          "name": "retptr",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8886,
                          "src": "22638:6:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "+",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 8899,
                            "name": "self",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8867,
                            "src": "22647:4:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                              "typeString": "struct StringUtils.slice memory"
                            }
                          },
                          "id": 8900,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "_len",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 7335,
                          "src": "22647:9:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "22638:18:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8902,
                          "name": "other",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8869,
                          "src": "22658:5:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                            "typeString": "struct StringUtils.slice memory"
                          }
                        },
                        "id": 8903,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_ptr",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7337,
                        "src": "22658:10:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8904,
                          "name": "other",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8869,
                          "src": "22670:5:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                            "typeString": "struct StringUtils.slice memory"
                          }
                        },
                        "id": 8905,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7335,
                        "src": "22670:10:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 8897,
                      "name": "memcpy",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7378,
                      "src": "22631:6:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (uint256,uint256,uint256) pure"
                      }
                    },
                    "id": 8906,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "22631:50:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8907,
                  "nodeType": "ExpressionStatement",
                  "src": "22631:50:35"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8908,
                    "name": "ret",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8875,
                    "src": "22694:3:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_memory_ptr",
                      "typeString": "string memory"
                    }
                  },
                  "functionReturnParameters": 8873,
                  "id": 8909,
                  "nodeType": "Return",
                  "src": "22687:10:35"
                }
              ]
            },
            "documentation": null,
            "id": 8911,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "concat",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8870,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8867,
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 8911,
                  "src": "22362:17:35",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                    "typeString": "struct StringUtils.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8866,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7338,
                    "src": "22362:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$7338_storage_ptr",
                      "typeString": "struct StringUtils.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8869,
                  "name": "other",
                  "nodeType": "VariableDeclaration",
                  "scope": 8911,
                  "src": "22381:18:35",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                    "typeString": "struct StringUtils.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8868,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7338,
                    "src": "22381:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$7338_storage_ptr",
                      "typeString": "struct StringUtils.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "22361:39:35"
            },
            "payable": false,
            "returnParameters": {
              "id": 8873,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8872,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8911,
                  "src": "22436:6:35",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 8871,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "22436:6:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "22435:15:35"
            },
            "scope": 9026,
            "src": "22346:356:35",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 9024,
              "nodeType": "Block",
              "src": "23127:549:35",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 8924,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 8921,
                        "name": "parts",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8916,
                        "src": "23137:5:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_slice_$7338_memory_$dyn_memory_ptr",
                          "typeString": "struct StringUtils.slice memory[] memory"
                        }
                      },
                      "id": 8922,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "23137:12:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 8923,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "23153:1:35",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "23137:17:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 8927,
                  "nodeType": "IfStatement",
                  "src": "23133:32:35",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "hexValue": "",
                      "id": 8925,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "string",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "23163:2:35",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                        "typeString": "literal_string \"\""
                      },
                      "value": ""
                    },
                    "functionReturnParameters": 8920,
                    "id": 8926,
                    "nodeType": "Return",
                    "src": "23156:9:35"
                  }
                },
                {
                  "assignments": [
                    8929
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8929,
                      "name": "length",
                      "nodeType": "VariableDeclaration",
                      "scope": 9025,
                      "src": "23172:14:35",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8928,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "23172:7:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8938,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 8937,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 8930,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8913,
                        "src": "23189:4:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                          "typeString": "struct StringUtils.slice memory"
                        }
                      },
                      "id": 8931,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7335,
                      "src": "23189:9:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "*",
                    "rightExpression": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 8935,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 8932,
                              "name": "parts",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8916,
                              "src": "23202:5:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_struct$_slice_$7338_memory_$dyn_memory_ptr",
                                "typeString": "struct StringUtils.slice memory[] memory"
                              }
                            },
                            "id": 8933,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "23202:12:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "-",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "31",
                            "id": 8934,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "23217:1:35",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "src": "23202:16:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "id": 8936,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "23201:18:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "23189:30:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "23172:47:35"
                },
                {
                  "body": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 8955,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftHandSide": {
                        "argumentTypes": null,
                        "id": 8950,
                        "name": "length",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8929,
                        "src": "23268:6:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "Assignment",
                      "operator": "+=",
                      "rightHandSide": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 8951,
                            "name": "parts",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8916,
                            "src": "23278:5:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_struct$_slice_$7338_memory_$dyn_memory_ptr",
                              "typeString": "struct StringUtils.slice memory[] memory"
                            }
                          },
                          "id": 8953,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 8952,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8940,
                            "src": "23284:1:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "23278:8:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$7338_memory",
                            "typeString": "struct StringUtils.slice memory"
                          }
                        },
                        "id": 8954,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7335,
                        "src": "23278:13:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "23268:23:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 8956,
                    "nodeType": "ExpressionStatement",
                    "src": "23268:23:35"
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 8946,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 8943,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8940,
                      "src": "23245:1:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 8944,
                        "name": "parts",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8916,
                        "src": "23249:5:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_slice_$7338_memory_$dyn_memory_ptr",
                          "typeString": "struct StringUtils.slice memory[] memory"
                        }
                      },
                      "id": 8945,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "23249:12:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "23245:16:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 8957,
                  "initializationExpression": {
                    "assignments": [
                      8940
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 8940,
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "scope": 9025,
                        "src": "23230:9:35",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 8939,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "23230:7:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 8942,
                    "initialValue": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 8941,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "23242:1:35",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "23230:13:35"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 8948,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "23263:3:35",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 8947,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8940,
                        "src": "23263:1:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 8949,
                    "nodeType": "ExpressionStatement",
                    "src": "23263:3:35"
                  },
                  "nodeType": "ForStatement",
                  "src": "23225:66:35"
                },
                {
                  "assignments": [
                    8959
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8959,
                      "name": "ret",
                      "nodeType": "VariableDeclaration",
                      "scope": 9025,
                      "src": "23298:17:35",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string"
                      },
                      "typeName": {
                        "id": 8958,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "23298:6:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage_ptr",
                          "typeString": "string"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8964,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8962,
                        "name": "length",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8929,
                        "src": "23329:6:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 8961,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "23318:10:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_string_memory_$",
                        "typeString": "function (uint256) pure returns (string memory)"
                      },
                      "typeName": {
                        "id": 8960,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "23322:6:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage_ptr",
                          "typeString": "string"
                        }
                      }
                    },
                    "id": 8963,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "23318:18:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_memory",
                      "typeString": "string memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "23298:38:35"
                },
                {
                  "assignments": [],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8966,
                      "name": "retptr",
                      "nodeType": "VariableDeclaration",
                      "scope": 9025,
                      "src": "23342:14:35",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8965,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "23342:7:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8967,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "23342:14:35"
                },
                {
                  "externalReferences": [
                    {
                      "retptr": {
                        "declaration": 8966,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "23379:6:35",
                        "valueSize": 1
                      }
                    },
                    {
                      "ret": {
                        "declaration": 8959,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "23393:3:35",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 8968,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    retptr := add(ret, 32)\n}",
                  "src": "23362:54:35"
                },
                {
                  "body": {
                    "id": 9020,
                    "nodeType": "Block",
                    "src": "23448:207:35",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 8981,
                              "name": "retptr",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8966,
                              "src": "23463:6:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "id": 8982,
                                  "name": "parts",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8916,
                                  "src": "23471:5:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_struct$_slice_$7338_memory_$dyn_memory_ptr",
                                    "typeString": "struct StringUtils.slice memory[] memory"
                                  }
                                },
                                "id": 8984,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "id": 8983,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8940,
                                  "src": "23477:1:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "23471:8:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_slice_$7338_memory",
                                  "typeString": "struct StringUtils.slice memory"
                                }
                              },
                              "id": 8985,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "_ptr",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 7337,
                              "src": "23471:13:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "id": 8986,
                                  "name": "parts",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8916,
                                  "src": "23486:5:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_struct$_slice_$7338_memory_$dyn_memory_ptr",
                                    "typeString": "struct StringUtils.slice memory[] memory"
                                  }
                                },
                                "id": 8988,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "id": 8987,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8940,
                                  "src": "23492:1:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "23486:8:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_slice_$7338_memory",
                                  "typeString": "struct StringUtils.slice memory"
                                }
                              },
                              "id": 8989,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "_len",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 7335,
                              "src": "23486:13:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 8980,
                            "name": "memcpy",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7378,
                            "src": "23456:6:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
                              "typeString": "function (uint256,uint256,uint256) pure"
                            }
                          },
                          "id": 8990,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "23456:44:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 8991,
                        "nodeType": "ExpressionStatement",
                        "src": "23456:44:35"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 8997,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 8992,
                            "name": "retptr",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8966,
                            "src": "23508:6:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 8993,
                                "name": "parts",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8916,
                                "src": "23518:5:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_struct$_slice_$7338_memory_$dyn_memory_ptr",
                                  "typeString": "struct StringUtils.slice memory[] memory"
                                }
                              },
                              "id": 8995,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 8994,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8940,
                                "src": "23524:1:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "23518:8:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_slice_$7338_memory",
                                "typeString": "struct StringUtils.slice memory"
                              }
                            },
                            "id": 8996,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "_len",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 7335,
                            "src": "23518:13:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "23508:23:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 8998,
                        "nodeType": "ExpressionStatement",
                        "src": "23508:23:35"
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 9004,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 8999,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8940,
                            "src": "23543:1:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 9003,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 9000,
                                "name": "parts",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8916,
                                "src": "23547:5:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_struct$_slice_$7338_memory_$dyn_memory_ptr",
                                  "typeString": "struct StringUtils.slice memory[] memory"
                                }
                              },
                              "id": 9001,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "length",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "23547:12:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "-",
                            "rightExpression": {
                              "argumentTypes": null,
                              "hexValue": "31",
                              "id": 9002,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "23562:1:35",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            },
                            "src": "23547:16:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "23543:20:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 9019,
                        "nodeType": "IfStatement",
                        "src": "23539:110:35",
                        "trueBody": {
                          "id": 9018,
                          "nodeType": "Block",
                          "src": "23565:84:35",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 9006,
                                    "name": "retptr",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8966,
                                    "src": "23582:6:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 9007,
                                      "name": "self",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 8913,
                                      "src": "23590:4:35",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                                        "typeString": "struct StringUtils.slice memory"
                                      }
                                    },
                                    "id": 9008,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "_ptr",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 7337,
                                    "src": "23590:9:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 9009,
                                      "name": "self",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 8913,
                                      "src": "23601:4:35",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                                        "typeString": "struct StringUtils.slice memory"
                                      }
                                    },
                                    "id": 9010,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "_len",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 7335,
                                    "src": "23601:9:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 9005,
                                  "name": "memcpy",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7378,
                                  "src": "23575:6:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
                                    "typeString": "function (uint256,uint256,uint256) pure"
                                  }
                                },
                                "id": 9011,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "23575:36:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 9012,
                              "nodeType": "ExpressionStatement",
                              "src": "23575:36:35"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 9016,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 9013,
                                  "name": "retptr",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8966,
                                  "src": "23621:6:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "+=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 9014,
                                    "name": "self",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8913,
                                    "src": "23631:4:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                                      "typeString": "struct StringUtils.slice memory"
                                    }
                                  },
                                  "id": 9015,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "_len",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 7335,
                                  "src": "23631:9:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "23621:19:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 9017,
                              "nodeType": "ExpressionStatement",
                              "src": "23621:19:35"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 8976,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 8973,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8940,
                      "src": "23425:1:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 8974,
                        "name": "parts",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8916,
                        "src": "23429:5:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_slice_$7338_memory_$dyn_memory_ptr",
                          "typeString": "struct StringUtils.slice memory[] memory"
                        }
                      },
                      "id": 8975,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "23429:12:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "23425:16:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 9021,
                  "initializationExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 8971,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftHandSide": {
                        "argumentTypes": null,
                        "id": 8969,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8940,
                        "src": "23418:1:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "Assignment",
                      "operator": "=",
                      "rightHandSide": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 8970,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "23422:1:35",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "23418:5:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 8972,
                    "nodeType": "ExpressionStatement",
                    "src": "23418:5:35"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 8978,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "23443:3:35",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 8977,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8940,
                        "src": "23443:1:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 8979,
                    "nodeType": "ExpressionStatement",
                    "src": "23443:3:35"
                  },
                  "nodeType": "ForStatement",
                  "src": "23413:242:35"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 9022,
                    "name": "ret",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8959,
                    "src": "23668:3:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_memory_ptr",
                      "typeString": "string memory"
                    }
                  },
                  "functionReturnParameters": 8920,
                  "id": 9023,
                  "nodeType": "Return",
                  "src": "23661:10:35"
                }
              ]
            },
            "documentation": null,
            "id": 9025,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "join",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8917,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8913,
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 9025,
                  "src": "23034:17:35",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$7338_memory_ptr",
                    "typeString": "struct StringUtils.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8912,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7338,
                    "src": "23034:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$7338_storage_ptr",
                      "typeString": "struct StringUtils.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8916,
                  "name": "parts",
                  "nodeType": "VariableDeclaration",
                  "scope": 9025,
                  "src": "23053:20:35",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_struct$_slice_$7338_memory_$dyn_memory_ptr",
                    "typeString": "struct StringUtils.slice[]"
                  },
                  "typeName": {
                    "baseType": {
                      "contractScope": null,
                      "id": 8914,
                      "name": "slice",
                      "nodeType": "UserDefinedTypeName",
                      "referencedDeclaration": 7338,
                      "src": "23053:5:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_slice_$7338_storage_ptr",
                        "typeString": "struct StringUtils.slice"
                      }
                    },
                    "id": 8915,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "23053:7:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_struct$_slice_$7338_storage_$dyn_storage_ptr",
                      "typeString": "struct StringUtils.slice[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "23033:41:35"
            },
            "payable": false,
            "returnParameters": {
              "id": 8920,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8919,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 9025,
                  "src": "23110:6:35",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 8918,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "23110:6:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "23109:15:35"
            },
            "scope": 9026,
            "src": "23020:656:35",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          }
        ],
        "scope": 9027,
        "src": "2109:21569:35"
      }
    ],
    "src": "1977:21702:35"
  },
  "compiler": {
    "name": "solc",
    "version": "0.4.24+commit.e67f0147.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.0.16",
  "updatedAt": "2021-03-06T09:30:01.066Z",
  "devdoc": {
    "methods": {}
  },
  "userdoc": {
    "methods": {}
  }
}