{
  "contractName": "PPF",
  "abi": [
    {
      "constant": true,
      "inputs": [],
      "name": "operatorOwner",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "operator",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "PPF_v1_ID",
      "outputs": [
        {
          "name": "",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "name": "_operator",
          "type": "address"
        },
        {
          "name": "_operatorOwner",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "base",
          "type": "address"
        },
        {
          "indexed": true,
          "name": "quote",
          "type": "address"
        },
        {
          "indexed": false,
          "name": "xrt",
          "type": "uint256"
        },
        {
          "indexed": false,
          "name": "when",
          "type": "uint64"
        }
      ],
      "name": "SetRate",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "operator",
          "type": "address"
        }
      ],
      "name": "SetOperator",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "operatorOwner",
          "type": "address"
        }
      ],
      "name": "SetOperatorOwner",
      "type": "event"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_operator",
          "type": "address"
        }
      ],
      "name": "setOperator",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_operatorOwner",
          "type": "address"
        }
      ],
      "name": "setOperatorOwner",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "base",
          "type": "address"
        },
        {
          "name": "quote",
          "type": "address"
        }
      ],
      "name": "get",
      "outputs": [
        {
          "name": "",
          "type": "uint128"
        },
        {
          "name": "",
          "type": "uint64"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "ratePrecision",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "base",
          "type": "address"
        },
        {
          "name": "quote",
          "type": "address"
        },
        {
          "name": "xrt",
          "type": "uint128"
        },
        {
          "name": "when",
          "type": "uint64"
        },
        {
          "name": "sig",
          "type": "bytes"
        }
      ],
      "name": "update",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "bases",
          "type": "address[]"
        },
        {
          "name": "quotes",
          "type": "address[]"
        },
        {
          "name": "xrts",
          "type": "uint128[]"
        },
        {
          "name": "whens",
          "type": "uint64[]"
        },
        {
          "name": "sigs",
          "type": "bytes"
        }
      ],
      "name": "updateMany",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x60806040523480156200001157600080fd5b5060405160408062001b188339810160405280516020909101516200003f826401000000006200005b810204565b62000053816401000000006200018a810204565b50506200027e565b60408051808201909152601981527f5050465f4f50455241544f525f414444524553535f5a45524f000000000000006020820152600160a060020a038216151562000141576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101562000105578181015183820152602001620000eb565b50505050905090810190601f168015620001335780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008054600160a060020a031916600160a060020a038316908117825560405190917fdbebfba65bd6398fb722063efc10c99f624f9cd8ba657201056af918a676d5ee91a250565b60408051808201909152601f81527f5050465f4f50455241544f525f4f574e45525f414444524553535f5a45524f006020820152600160a060020a038216151562000233576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360008381101562000105578181015183820152602001620000eb565b5060018054600160a060020a031916600160a060020a0383169081179091556040517f99ac3391bcaac6e04578cbac2efd183c665745adeb1ad37989376c39f137177a90600090a250565b61188a806200028e6000396000f3006080604052600436106100985763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416630cc893e2811461009d5780630dfcdb07146100db578063570ca7351461021b57806377bb136114610230578063b3ab15fb14610257578063b800919e14610285578063d81e8423146102b3578063f40a04481461031c578063fdadbbb614610331575b600080fd5b3480156100a957600080fd5b506100b26103d1565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b3480156100e757600080fd5b506040805160206004803580820135838102808601850190965280855261021995369593946024949385019291829185019084908082843750506040805187358901803560208181028481018201909552818452989b9a998901989297509082019550935083925085019084908082843750506040805187358901803560208181028481018201909552818452989b9a998901989297509082019550935083925085019084908082843750506040805187358901803560208181028481018201909552818452989b9a99890198929750908201955093508392508501908490808284375050604080516020601f89358b018035918201839004830284018301909452808352979a9998810197919650918201945092508291508401838280828437509497506103ed9650505050505050565b005b34801561022757600080fd5b506100b26108d3565b34801561023c57600080fd5b506102456108ef565b60408051918252519081900360200190f35b34801561026357600080fd5b5061021973ffffffffffffffffffffffffffffffffffffffff60043516610913565b34801561029157600080fd5b5061021973ffffffffffffffffffffffffffffffffffffffff600435166109fa565b3480156102bf57600080fd5b506102e773ffffffffffffffffffffffffffffffffffffffff60043581169060243516610aba565b604080516fffffffffffffffffffffffffffffffff909316835267ffffffffffffffff90911660208301528051918290030190f35b34801561032857600080fd5b50610245610baf565b34801561033d57600080fd5b50604080516020601f6084356004818101359283018490048402850184019095528184526102199473ffffffffffffffffffffffffffffffffffffffff813581169560248035909216956fffffffffffffffffffffffffffffffff604435169567ffffffffffffffff606435169536959460a49493910191908190840183828082843750949750610bbb9650505050505050565b60015473ffffffffffffffffffffffffffffffffffffffff1681565b845160408051808201909152601b81527f5050465f424153455f4144445245535345535f4c454e5f5a45524f00000000006020820152600091606091839115156104cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561049457818101518382015260200161047c565b50505050905090810190601f1680156104c15780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50865188516040805180820190915260208082527f5050465f51554f54455f4144445245535345535f4c454e5f4d49534d41544348908201529114610570576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360008381101561049457818101518382015260200161047c565b508551885160408051808201909152601c81527f5050465f524154455f56414c5545535f4c454e5f4d49534d415443480000000060208201529114610611576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360008381101561049457818101518382015260200161047c565b50845188516040805180820190915260208082527f5050465f524154455f54494d455354414d50535f4c454e5f4d49534d415443489082015291146106b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360008381101561049457818101518382015260200161047c565b508351885160408051808201909152601b81527f5050465f5349474e4154555245535f4c454e5f4d49534d4154434800000000006020820152916041900414610757576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360008381101561049457818101518382015260200161047c565b50835160408051808201909152601b81527f5050465f5349474e4154555245535f4c454e5f4d49534d41544348000000000060208201529060419006156107fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360008381101561049457818101518382015260200161047c565b50600092505b87518310156108c957604080516041808252608082019092529060208201610820803883390190505091508260410260200190508084015160208301526020810184015160408301526021810184015160608301536108be888481518110151561086657fe5b90602001906020020151888581518110151561087e57fe5b90602001906020020151888681518110151561089657fe5b9060200190602002015188878151811015156108ae57fe5b9060200190602002015186610bbb565b600190920191610800565b5050505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b7f33a8ba7202230fa1cee2aac7bac322939edc7ba0a48b0989335a5f87a577036981565b60005473ffffffffffffffffffffffffffffffffffffffff16331480610950575060015473ffffffffffffffffffffffffffffffffffffffff1633145b60408051808201909152601881527f5050465f43414e5f4e4f545f5345545f4f50455241544f52000000000000000060208201529015156109ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360008381101561049457818101518382015260200161047c565b506109f781611032565b50565b60015460408051808201909152601e81527f5050465f43414e5f4e4f545f5345545f4f50455241544f525f4f574e4552000060208201529073ffffffffffffffffffffffffffffffffffffffff163314610ab0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360008381101561049457818101518382015260200161047c565b506109f781611153565b60008060008373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415610b0d57670de0b6b3a7640000610b04611276565b92509250610ba7565b60026000610b1b878761128d565b815260208101919091526040016000208054909150700100000000000000000000000000000000900467ffffffffffffffff161515610b605760009250829150610ba7565b8054610b8190869086906fffffffffffffffffffffffffffffffff166113e1565b8154909350700100000000000000000000000000000000900467ffffffffffffffff1691505b509250929050565b670de0b6b3a764000090565b600080610bc8878761128d565b60008181526002602052604090205490925067ffffffffffffffff7001000000000000000000000000000000009091048116908516118015610c1b5750610c0d611432565b8467ffffffffffffffff1611155b60408051808201909152601681527f5050465f4241445f524154455f54494d455354414d50000000000000000000006020820152901515610cb8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360008381101561049457818101518382015260200161047c565b5060408051808201909152601681527f5050465f494e56414c49445f524154455f56414c554500000000000000000000602082015260006fffffffffffffffffffffffffffffffff871611610d69576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360008381101561049457818101518382015260200161047c565b5060408051808201909152601e81527f5050465f455155414c5f424153455f51554f54455f4144445245535345530000602082015273ffffffffffffffffffffffffffffffffffffffff8881169088161415610e21576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360008381101561049457818101518382015260200161047c565b50610e2e87878787611436565b60005490915073ffffffffffffffffffffffffffffffffffffffff16610e5a828563ffffffff6115a116565b73ffffffffffffffffffffffffffffffffffffffff16146040805190810160405280601181526020017f5050465f4241445f5349474e4154555245000000000000000000000000000000815250901515610f10576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360008381101561049457818101518382015260200161047c565b506040805190810160405280610f278989896113e1565b6fffffffffffffffffffffffffffffffff908116825267ffffffffffffffff878116602093840181905260008781526002855260409081902086518154978701517fffffffffffffffffffffffffffffffff00000000000000000000000000000000909816908616177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff167001000000000000000000000000000000009790941696909602929092179094558051918916825291810192909252805173ffffffffffffffffffffffffffffffffffffffff89811693908b16927fdc3cf748498d22cc47e2d62e2a7216a21f3e47de73ea3d4a9b2a7ccd976ff84d92918290030190a350505050505050565b60408051808201909152601981527f5050465f4f50455241544f525f414444524553535f5a45524f00000000000000602082015273ffffffffffffffffffffffffffffffffffffffff821615156110e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360008381101561049457818101518382015260200161047c565b50600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8316908117825560405190917fdbebfba65bd6398fb722063efc10c99f624f9cd8ba657201056af918a676d5ee91a250565b60408051808201909152601f81527f5050465f4f50455241544f525f4f574e45525f414444524553535f5a45524f00602082015273ffffffffffffffffffffffffffffffffffffffff82161515611206576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360008381101561049457818101518382015260200161047c565b50600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517f99ac3391bcaac6e04578cbac2efd183c665745adeb1ad37989376c39f137177a90600090a250565b6000611288611283611432565b6115bc565b905090565b60008060008061129d868661166c565b9250826112aa57846112ac565b855b9150826112b957856112bb565b845b90508181604051602001808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401925050506040516020818303038152906040526040518082805190602001908083835b602083106113a857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161136b565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051809103902093505b50505092915050565b6000806113ee858561166c565b905080611427576fffffffffffffffffffffffffffffffff83166ec097ce7bc90715b34b9f100000000081151561142157fe5b04611429565b825b95945050505050565b4290565b604080517f33a8ba7202230fa1cee2aac7bac322939edc7ba0a48b0989335a5f87a57703696020808301919091526c0100000000000000000000000073ffffffffffffffffffffffffffffffffffffffff80891682028486015287160260548301527001000000000000000000000000000000006fffffffffffffffffffffffffffffffff8616026068830152780100000000000000000000000000000000000000000000000067ffffffffffffffff8516026078830152825160608184030181526080909201928390528151600093918291908401908083835b6020831061154e57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611511565b5181516020939093036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0180199091169216919091179052604051920182900390912098975050505050505050565b60006115b56115af8461168a565b83611770565b9392505050565b60408051808201909152601581527f55494e5436345f4e554d4245525f544f4f5f4249470000000000000000000000602082015260009067ffffffffffffffff831115611665576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360008381101561049457818101518382015260200161047c565b5090919050565b73ffffffffffffffffffffffffffffffffffffffff90811691161090565b604080517f19457468657265756d205369676e6564204d6573736167653a0a333200000000602080830191909152603c80830185905283518084039091018152605c909201928390528151600093918291908401908083835b6020831061172057805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016116e3565b5181516020939093036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0180199091169216919091179052604051920182900390912095945050505050565b6000806000808451604114151561178a57600093506113d8565b50505060208201516040830151606084015160001a601b60ff821610156117af57601b015b8060ff16601b141580156117c757508060ff16601c14155b156117d557600093506113d8565b60408051600080825260208083018085528a905260ff8516838501526060830187905260808301869052925160019360a08085019491937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0840193928390039091019190865af115801561184d573d6000803e3d6000fd5b5050506020604051035193506113d85600a165627a7a723058202ca3f8d616980530f7323691d735d7af3d21f71b3ea730afd6ba4a1d484a888b0029",
  "deployedBytecode": "0x6080604052600436106100985763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416630cc893e2811461009d5780630dfcdb07146100db578063570ca7351461021b57806377bb136114610230578063b3ab15fb14610257578063b800919e14610285578063d81e8423146102b3578063f40a04481461031c578063fdadbbb614610331575b600080fd5b3480156100a957600080fd5b506100b26103d1565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b3480156100e757600080fd5b506040805160206004803580820135838102808601850190965280855261021995369593946024949385019291829185019084908082843750506040805187358901803560208181028481018201909552818452989b9a998901989297509082019550935083925085019084908082843750506040805187358901803560208181028481018201909552818452989b9a998901989297509082019550935083925085019084908082843750506040805187358901803560208181028481018201909552818452989b9a99890198929750908201955093508392508501908490808284375050604080516020601f89358b018035918201839004830284018301909452808352979a9998810197919650918201945092508291508401838280828437509497506103ed9650505050505050565b005b34801561022757600080fd5b506100b26108d3565b34801561023c57600080fd5b506102456108ef565b60408051918252519081900360200190f35b34801561026357600080fd5b5061021973ffffffffffffffffffffffffffffffffffffffff60043516610913565b34801561029157600080fd5b5061021973ffffffffffffffffffffffffffffffffffffffff600435166109fa565b3480156102bf57600080fd5b506102e773ffffffffffffffffffffffffffffffffffffffff60043581169060243516610aba565b604080516fffffffffffffffffffffffffffffffff909316835267ffffffffffffffff90911660208301528051918290030190f35b34801561032857600080fd5b50610245610baf565b34801561033d57600080fd5b50604080516020601f6084356004818101359283018490048402850184019095528184526102199473ffffffffffffffffffffffffffffffffffffffff813581169560248035909216956fffffffffffffffffffffffffffffffff604435169567ffffffffffffffff606435169536959460a49493910191908190840183828082843750949750610bbb9650505050505050565b60015473ffffffffffffffffffffffffffffffffffffffff1681565b845160408051808201909152601b81527f5050465f424153455f4144445245535345535f4c454e5f5a45524f00000000006020820152600091606091839115156104cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561049457818101518382015260200161047c565b50505050905090810190601f1680156104c15780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50865188516040805180820190915260208082527f5050465f51554f54455f4144445245535345535f4c454e5f4d49534d41544348908201529114610570576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360008381101561049457818101518382015260200161047c565b508551885160408051808201909152601c81527f5050465f524154455f56414c5545535f4c454e5f4d49534d415443480000000060208201529114610611576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360008381101561049457818101518382015260200161047c565b50845188516040805180820190915260208082527f5050465f524154455f54494d455354414d50535f4c454e5f4d49534d415443489082015291146106b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360008381101561049457818101518382015260200161047c565b508351885160408051808201909152601b81527f5050465f5349474e4154555245535f4c454e5f4d49534d4154434800000000006020820152916041900414610757576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360008381101561049457818101518382015260200161047c565b50835160408051808201909152601b81527f5050465f5349474e4154555245535f4c454e5f4d49534d41544348000000000060208201529060419006156107fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360008381101561049457818101518382015260200161047c565b50600092505b87518310156108c957604080516041808252608082019092529060208201610820803883390190505091508260410260200190508084015160208301526020810184015160408301526021810184015160608301536108be888481518110151561086657fe5b90602001906020020151888581518110151561087e57fe5b90602001906020020151888681518110151561089657fe5b9060200190602002015188878151811015156108ae57fe5b9060200190602002015186610bbb565b600190920191610800565b5050505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b7f33a8ba7202230fa1cee2aac7bac322939edc7ba0a48b0989335a5f87a577036981565b60005473ffffffffffffffffffffffffffffffffffffffff16331480610950575060015473ffffffffffffffffffffffffffffffffffffffff1633145b60408051808201909152601881527f5050465f43414e5f4e4f545f5345545f4f50455241544f52000000000000000060208201529015156109ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360008381101561049457818101518382015260200161047c565b506109f781611032565b50565b60015460408051808201909152601e81527f5050465f43414e5f4e4f545f5345545f4f50455241544f525f4f574e4552000060208201529073ffffffffffffffffffffffffffffffffffffffff163314610ab0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360008381101561049457818101518382015260200161047c565b506109f781611153565b60008060008373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415610b0d57670de0b6b3a7640000610b04611276565b92509250610ba7565b60026000610b1b878761128d565b815260208101919091526040016000208054909150700100000000000000000000000000000000900467ffffffffffffffff161515610b605760009250829150610ba7565b8054610b8190869086906fffffffffffffffffffffffffffffffff166113e1565b8154909350700100000000000000000000000000000000900467ffffffffffffffff1691505b509250929050565b670de0b6b3a764000090565b600080610bc8878761128d565b60008181526002602052604090205490925067ffffffffffffffff7001000000000000000000000000000000009091048116908516118015610c1b5750610c0d611432565b8467ffffffffffffffff1611155b60408051808201909152601681527f5050465f4241445f524154455f54494d455354414d50000000000000000000006020820152901515610cb8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360008381101561049457818101518382015260200161047c565b5060408051808201909152601681527f5050465f494e56414c49445f524154455f56414c554500000000000000000000602082015260006fffffffffffffffffffffffffffffffff871611610d69576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360008381101561049457818101518382015260200161047c565b5060408051808201909152601e81527f5050465f455155414c5f424153455f51554f54455f4144445245535345530000602082015273ffffffffffffffffffffffffffffffffffffffff8881169088161415610e21576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360008381101561049457818101518382015260200161047c565b50610e2e87878787611436565b60005490915073ffffffffffffffffffffffffffffffffffffffff16610e5a828563ffffffff6115a116565b73ffffffffffffffffffffffffffffffffffffffff16146040805190810160405280601181526020017f5050465f4241445f5349474e4154555245000000000000000000000000000000815250901515610f10576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360008381101561049457818101518382015260200161047c565b506040805190810160405280610f278989896113e1565b6fffffffffffffffffffffffffffffffff908116825267ffffffffffffffff878116602093840181905260008781526002855260409081902086518154978701517fffffffffffffffffffffffffffffffff00000000000000000000000000000000909816908616177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff167001000000000000000000000000000000009790941696909602929092179094558051918916825291810192909252805173ffffffffffffffffffffffffffffffffffffffff89811693908b16927fdc3cf748498d22cc47e2d62e2a7216a21f3e47de73ea3d4a9b2a7ccd976ff84d92918290030190a350505050505050565b60408051808201909152601981527f5050465f4f50455241544f525f414444524553535f5a45524f00000000000000602082015273ffffffffffffffffffffffffffffffffffffffff821615156110e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360008381101561049457818101518382015260200161047c565b50600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8316908117825560405190917fdbebfba65bd6398fb722063efc10c99f624f9cd8ba657201056af918a676d5ee91a250565b60408051808201909152601f81527f5050465f4f50455241544f525f4f574e45525f414444524553535f5a45524f00602082015273ffffffffffffffffffffffffffffffffffffffff82161515611206576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360008381101561049457818101518382015260200161047c565b50600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517f99ac3391bcaac6e04578cbac2efd183c665745adeb1ad37989376c39f137177a90600090a250565b6000611288611283611432565b6115bc565b905090565b60008060008061129d868661166c565b9250826112aa57846112ac565b855b9150826112b957856112bb565b845b90508181604051602001808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401925050506040516020818303038152906040526040518082805190602001908083835b602083106113a857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161136b565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051809103902093505b50505092915050565b6000806113ee858561166c565b905080611427576fffffffffffffffffffffffffffffffff83166ec097ce7bc90715b34b9f100000000081151561142157fe5b04611429565b825b95945050505050565b4290565b604080517f33a8ba7202230fa1cee2aac7bac322939edc7ba0a48b0989335a5f87a57703696020808301919091526c0100000000000000000000000073ffffffffffffffffffffffffffffffffffffffff80891682028486015287160260548301527001000000000000000000000000000000006fffffffffffffffffffffffffffffffff8616026068830152780100000000000000000000000000000000000000000000000067ffffffffffffffff8516026078830152825160608184030181526080909201928390528151600093918291908401908083835b6020831061154e57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611511565b5181516020939093036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0180199091169216919091179052604051920182900390912098975050505050505050565b60006115b56115af8461168a565b83611770565b9392505050565b60408051808201909152601581527f55494e5436345f4e554d4245525f544f4f5f4249470000000000000000000000602082015260009067ffffffffffffffff831115611665576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360008381101561049457818101518382015260200161047c565b5090919050565b73ffffffffffffffffffffffffffffffffffffffff90811691161090565b604080517f19457468657265756d205369676e6564204d6573736167653a0a333200000000602080830191909152603c80830185905283518084039091018152605c909201928390528151600093918291908401908083835b6020831061172057805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016116e3565b5181516020939093036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0180199091169216919091179052604051920182900390912095945050505050565b6000806000808451604114151561178a57600093506113d8565b50505060208201516040830151606084015160001a601b60ff821610156117af57601b015b8060ff16601b141580156117c757508060ff16601c14155b156117d557600093506113d8565b60408051600080825260208083018085528a905260ff8516838501526060830187905260808301869052925160019360a08085019491937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0840193928390039091019190865af115801561184d573d6000803e3d6000fd5b5050506020604051035193506113d85600a165627a7a723058202ca3f8d616980530f7323691d735d7af3d21f71b3ea730afd6ba4a1d484a888b0029",
  "sourceMap": "144:9092:64:-;;;2221:146;8:9:-1;5:2;;;30:1;27;20:12;5:2;2221:146:64;;;;;;;;;;;;;;;;;;;2294:23;2221:146;2294:12;;;;:23;:::i;:::-;2327:33;2345:14;2327:17;;;;:33;:::i;:::-;2221:146;;144:9092;;7688:195;7781:27;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7756:23:64;;;;7748:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;7748:61:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7819:8:64;:20;;-1:-1:-1;;;;;;7819:20:64;-1:-1:-1;;;;;7819:20:64;;;;;;;7854:22;;7819:20;;7854:22;;;7688:195;:::o;7889:236::-;7997:33;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7967:28:64;;;;7959:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;7959:72:64;-1:-1:-1;8041:13:64;:30;;-1:-1:-1;;;;;;8041:30:64;-1:-1:-1;;;;;8041:30:64;;;;;;;;8086:32;;;;-1:-1:-1;;8086:32:64;7889:236;:::o;144:9092::-;;;;;;;",
  "deployedSourceMap": "144:9092:64:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1764:28;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1764:28:64;;;;;;;;;;;;;;;;;;;;;;;6312:1370;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;6312:1370:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;6312:1370:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6312:1370:64;;;;-1:-1:-1;6312:1370:64;-1:-1:-1;6312:1370:64;;-1:-1:-1;6312:1370:64;;;;;;;;;-1:-1:-1;;6312:1370:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6312:1370:64;;;;-1:-1:-1;6312:1370:64;-1:-1:-1;6312:1370:64;;-1:-1:-1;6312:1370:64;;;;;;;;;-1:-1:-1;;6312:1370:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6312:1370:64;;;;-1:-1:-1;6312:1370:64;-1:-1:-1;6312:1370:64;;-1:-1:-1;6312:1370:64;;;;;;;;;-1:-1:-1;;6312:1370:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6312:1370:64;;;;-1:-1:-1;6312:1370:64;-1:-1:-1;6312:1370:64;;-1:-1:-1;6312:1370:64;;;;;;;;-1:-1:-1;6312:1370:64;;-1:-1:-1;6312:1370:64;;-1:-1:-1;;;;;;;6312:1370:64;;;1735:23;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1735:23:64;;;;220:102;;8:9:-1;5:2;;;30:1;27;20:12;5:2;220:102:64;;;;;;;;;;;;;;;;;;;;2524:363;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2524:363:64;;;;;;;3040:189;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3040:189:64;;;;;;;3452:408;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3452:408:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3951:84;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3951:84:64;;;;4756:905;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;4756:905:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4756:905:64;;-1:-1:-1;4756:905:64;;-1:-1:-1;;;;;;;4756:905:64;1764:28;;;;;;:::o;6312:1370::-;6436:12;;6455:32;;;;;;;;;;;;;;;;;6917:9;;7048:16;;6917:9;;6436:17;;6428:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;6428:60:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6522:13:64;;6506:12;;6537:37;;;;;;;;;;;;;;;;;;;6506:29;6498:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;6498:77:64;-1:-1:-1;6609:11:64;;6593:12;;6622:33;;;;;;;;;;;;;;;;;;6593:27;6585:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;6585:71:64;-1:-1:-1;6690:12:64;;6674;;6704:37;;;;;;;;;;;;;;;;;;;6674:28;6666:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;6666:76:64;-1:-1:-1;6776:11:64;;6760:12;;6794:32;;;;;;;;;;;;;;;;;;6790:2;6776:16;;6760:32;6752:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;6752:75:64;-1:-1:-1;6845:11:64;;6868:32;;;;;;;;;;;;;;;;;;6859:2;6845:16;;:21;6837:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;6837:64:64;;6929:1;6917:13;;6912:764;6936:5;:12;6932:1;:16;6912:764;;;7067:13;;;7077:2;7067:13;;;;;;;;;;;;;17:15:-1;;105:10;7067:13:64;88:34:-1;136:17;;-1:-1;7067:13:64;7048:32;;7121:1;7116:2;:6;7111:2;:11;7094:28;;7315:6;7309:4;7305:17;7299:24;7292:4;7287:3;7283:14;7276:48;7392:4;7384:6;7380:17;7374:4;7370:28;7364:35;7357:4;7352:3;7348:14;7341:59;7578:4;7570:6;7566:17;7560:4;7556:28;7550:35;7543:4;7538:3;7534:14;7526:60;7614:51;7621:5;7627:1;7621:8;;;;;;;;;;;;;;;;;;7631:6;7638:1;7631:9;;;;;;;;;;;;;;;;;;7642:4;7647:1;7642:7;;;;;;;;;;;;;;;;;;7651:5;7657:1;7651:8;;;;;;;;;;;;;;;;;;7661:3;7614:6;:51::i;:::-;6950:3;;;;;6912:764;;;6312:1370;;;;;;;;:::o;1735:23::-;;;;;;:::o;220:102::-;256:66;220:102;:::o;2524:363::-;2779:8;;;;2765:10;:22;;:53;;-1:-1:-1;2805:13:64;;;;2791:10;:27;2765:53;2820:26;;;;;;;;;;;;;;;;;;2757:90;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;2757:90:64;;2857:23;2870:9;2857:12;:23::i;:::-;2524:363;:::o;3040:189::-;3131:13;;3146:32;;;;;;;;;;;;;;;;;;3131:13;;3117:10;:27;3109:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;3109:70:64;;3189:33;3207:14;3189:17;:33::i;3452:408::-;3517:7;3526:6;3637:19;3556:5;3548:13;;:4;:13;;;3544:83;;;384:8;3599:16;:14;:16::i;:::-;3577:39;;;;;;3544:83;3659:4;:26;3664:20;3672:4;3678:5;3664:7;:20::i;:::-;3659:26;;;;;;;;;;;-1:-1:-1;3659:26:64;3735:10;;3659:26;;-1:-1:-1;3735:10:64;;;;;:15;3731:59;;;3774:1;;-1:-1:-1;3774:1:64;;-1:-1:-1;3766:13:64;;3731:59;3830:9;;3808:32;;3817:4;;3823:5;;3830:9;;3808:8;:32::i;:::-;3842:10;;3800:53;;-1:-1:-1;3842:10:64;;;;;;-1:-1:-1;3452:408:64;;;;;;;:::o;3951:84::-;384:8;3951:84;:::o;4756:905::-;4855:12;5375:9;4870:20;4878:4;4884:5;4870:7;:20::i;:::-;5022:10;;;;:4;:10;;;;;:15;4855:35;;-1:-1:-1;5022:15:64;;;;;;;5015:22;;;;:48;;;;;5049:14;:12;:14::i;:::-;5041:4;:22;;;;5015:48;5065:24;;;;;;;;;;;;;;;;;;5007:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;5007:83:64;-1:-1:-1;5117:24:64;;;;;;;;;;;;;;;;;5114:1;5108:7;;;;5100:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;5100:42:64;-1:-1:-1;5257:32:64;;;;;;;;;;;;;;;;;5242:13;;;;;;;;;5234:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;5234:56:64;;5387:32;5396:4;5402:5;5409:3;5414:4;5387:8;:32::i;:::-;5463:8;;5375:44;;-1:-1:-1;5463:8:64;;5437:22;5375:44;5455:3;5437:22;:17;:22;:::i;:::-;:34;;;5473:19;;;;;;;;;;;;;;;;;;5429:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;5429:64:64;;5568:39;;;;;;;;;5574:26;5583:4;5589:5;5596:3;5574:8;:26::i;:::-;5568:39;;;;;;;;;;;;;;;;;-1:-1:-1;5555:10:64;;;:4;:10;;;;;;;:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5623:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4756:905;;;;;;;:::o;7688:195::-;7781:27;;;;;;;;;;;;;;;;;7756:23;;;;;7748:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;7748:61:64;-1:-1:-1;7819:8:64;:20;;;;;;;;;;;;7854:22;;7819:20;;7854:22;;;7688:195;:::o;7889:236::-;7997:33;;;;;;;;;;;;;;;;;7967:28;;;;;7959:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;7959:72:64;-1:-1:-1;8041:13:64;:30;;;;;;;;;;;;;8086:32;;;;-1:-1:-1;;8086:32:64;7889:236;:::o;1261:106:37:-;1310:6;1335:25;:14;:12;:14::i;:::-;:23;:25::i;:::-;1328:32;;1261:106;:::o;8234:330:64:-;8303:7;8322:16;8378:19;8436:20;8341:27;8356:4;8362:5;8341:14;:27::i;:::-;8322:46;;8400:11;:26;;8421:5;8400:26;;;8414:4;8400:26;8378:48;;8459:11;:26;;8481:4;8459:26;;;8473:5;8459:26;8436:49;;8530:11;8543:12;8513:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;8513:43:64;;;8503:54;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;139:12;;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;8503:54:64;;;;;;;;;;;;;;;;8496:61;;8234:330;;;;;;;;:::o;8643:271::-;8726:7;8745:16;8764:27;8779:4;8785:5;8764:14;:27::i;:::-;8745:46;;8809:11;:52;;8847:12;;;8838:6;:21;;;;;;;;8809:52;;;8823:3;8809:52;8802:59;8643:271;-1:-1:-1;;;;;8643:271:64:o;926:144:37:-;999:15;926:144;:::o;8920:191:64:-;9052:51;;;256:66;9052:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22:32:-1;26:21;;;22:32;6:49;;9052:51:64;;;;;;;;9042:62;;9016:7;;9052:51;;;9042:62;;;;;9052:51;9042:62;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;139:12;;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;;254:3;250:22;246:30;;311:9;;295:26;;;340:21;;377:20;;;;365:33;;9042:62:64;;;;;;;;;;;;-1:-1:-1;;;;;;;;8920:191:64:o;588:142:65:-;661:7;683:42;691:28;714:4;691:22;:28::i;:::-;721:3;683:7;:42::i;:::-;676:49;588:142;-1:-1:-1;;;588:142:65:o;188:149:38:-;283:20;;;;;;;;;;;;;;;;;240:6;;271:10;266:15;;;258:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;258:46:38;-1:-1:-1;328:1:38;;188:149;-1:-1:-1;188:149:38:o;9117:117:64:-;9215:12;;;;;;;;9117:117::o;1844:283:65:-;2045:76;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;2045:76:65;;;;;;;;2035:87;;1925:7;;2045:76;;;2035:87;;;;;2045:76;2035:87;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;139:12;;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;;254:3;250:22;246:30;;311:9;;295:26;;;340:21;;377:20;;;;365:33;;2035:87:65;;;;;;;;;;;;-1:-1:-1;;;;;1844:283:65:o;1006:695::-;1071:7;1086:9;1101;1116:7;1167:3;:10;1181:2;1167:16;;1163:56;;;1209:1;1193:19;;;;1163:56;-1:-1:-1;;;1314:2:65;1305:12;;1299:19;1345:2;1336:12;;1330:19;1384:2;1375:12;;1369:19;1366:1;1361:28;1496:2;1492:6;;;;1488:34;;;1513:2;1508:7;1488:34;1591:1;:7;;1596:2;1591:7;;:18;;;;;1602:1;:7;;1607:2;1602:7;;1591:18;1587:110;;;1635:1;1619:19;;;;1587:110;1666:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1666:24:65;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1666:24:65;;;;;;;;1659:31;;;",
  "source": "pragma solidity 0.4.24;\n\nimport \"./IFeed.sol\";\nimport \"./open-zeppelin/ECRecovery.sol\";\nimport \"@aragon/os/contracts/common/TimeHelpers.sol\";\n\n\ncontract PPF is IFeed, TimeHelpers {\n    using ECRecovery for bytes32;\n\n    bytes32 constant public PPF_v1_ID = 0x33a8ba7202230fa1cee2aac7bac322939edc7ba0a48b0989335a5f87a5770369; // keccak256(\"PPF-v1\");\n    uint256 constant internal ONE = 10 ** 18; // 10^18 is considered 1 in the price feed to allow for decimal calculations\n\n    string private constant ERROR_BAD_SIGNATURE = \"PPF_BAD_SIGNATURE\";\n    string private constant ERROR_BAD_RATE_TIMESTAMP = \"PPF_BAD_RATE_TIMESTAMP\";\n    string private constant ERROR_INVALID_RATE_VALUE = \"PPF_INVALID_RATE_VALUE\";\n    string private constant ERROR_EQUAL_BASE_QUOTE_ADDRESSES = \"PPF_EQUAL_BASE_QUOTE_ADDRESSES\";\n    string private constant ERROR_BASE_ADDRESSES_LENGTH_ZERO = \"PPF_BASE_ADDRESSES_LEN_ZERO\";\n    string private constant ERROR_QUOTE_ADDRESSES_LENGTH_MISMATCH = \"PPF_QUOTE_ADDRESSES_LEN_MISMATCH\";\n    string private constant ERROR_RATE_VALUES_LENGTH_MISMATCH = \"PPF_RATE_VALUES_LEN_MISMATCH\";\n    string private constant ERROR_RATE_TIMESTAMPS_LENGTH_MISMATCH = \"PPF_RATE_TIMESTAMPS_LEN_MISMATCH\";\n    string private constant ERROR_SIGNATURES_LENGTH_MISMATCH = \"PPF_SIGNATURES_LEN_MISMATCH\";\n    string private constant ERROR_CAN_NOT_SET_OPERATOR = \"PPF_CAN_NOT_SET_OPERATOR\";\n    string private constant ERROR_CAN_NOT_SET_OPERATOR_OWNER = \"PPF_CAN_NOT_SET_OPERATOR_OWNER\";\n    string private constant ERROR_OPERATOR_ADDRESS_ZERO = \"PPF_OPERATOR_ADDRESS_ZERO\";\n    string private constant ERROR_OPERATOR_OWNER_ADDRESS_ZERO = \"PPF_OPERATOR_OWNER_ADDRESS_ZERO\";\n\n    struct Price {\n        uint128 xrt;\n        uint64 when;\n    }\n\n    address public operator;\n    address public operatorOwner;\n    mapping (bytes32 => Price) internal feed;\n\n    event SetRate(address indexed base, address indexed quote, uint256 xrt, uint64 when);\n    event SetOperator(address indexed operator);\n    event SetOperatorOwner(address indexed operatorOwner);\n\n    /**\n    * @param _operator Public key allowed to sign messages to update the pricefeed\n    * @param _operatorOwner Address of an account that can change the operator\n    */\n    constructor (address _operator, address _operatorOwner) public {\n        _setOperator(_operator);\n        _setOperatorOwner(_operatorOwner);\n    }\n\n    /**\n    * @notice Set operator public key to `_operator`\n    * @param _operator Public key allowed to sign messages to update the pricefeed\n    */\n    function setOperator(address _operator) external {\n        // Allow the current operator to change the operator to avoid having to hassle the\n        // operatorOwner in cases where a node just wants to rotate its public key\n        require(msg.sender == operator || msg.sender == operatorOwner, ERROR_CAN_NOT_SET_OPERATOR);\n        _setOperator(_operator);\n    }\n\n    /**\n    * @notice Set operator owner to `_operatorOwner`\n    * @param _operatorOwner Address of an account that can change the operator\n    */\n    function setOperatorOwner(address _operatorOwner) external {\n        require(msg.sender == operatorOwner, ERROR_CAN_NOT_SET_OPERATOR_OWNER);\n        _setOperatorOwner(_operatorOwner);\n    }\n\n    /**\n    * @param base Address for the base token in the feed\n    * @param quote Address for the quote token the base is denominated in\n    * @return XRT for base:quote and the timestamp when it was updated\n    */\n    function get(address base, address quote) external view returns (uint128, uint64) {\n        if (base == quote) {\n            return (uint128(ONE), getTimestamp64());\n        }\n\n        Price storage price = feed[_pairId(base, quote)];\n\n        // if never set, return 0.\n        if (price.when == 0) {\n            return (0, 0);\n        }\n\n        return (_pairXRT(base, quote, price.xrt), price.when);\n    }\n\n    /**\n\n    * @return The minimum rate precision used for the exchange rates\n    */\n    function ratePrecision() external pure returns (uint256) {\n        return ONE;\n    }\n\n    /**\n    * @notice Update the price for the `base + ':' + quote` feed with an exchange rate of `xrt / ONE` for time `when`\n    * @dev If the number representation of base is lower than the one for quote, and update is cheaper, as less manipulation is required.\n    * @param base Address for the base token in the feed\n    * @param quote Address for the quote token the base is denominated in\n    * @param xrt Exchange rate for base denominated in quote. 10^18 is considered 1 to allow for decimal calculations\n    * @param when Timestamp for the exchange rate value\n    * @param sig Signature payload (EIP191) from operator, concatenated [  r  ][  s  ][v]. See _setHash function for the hash calculation.\n    */\n    function update(address base, address quote, uint128 xrt, uint64 when, bytes sig) public {\n        bytes32 pair = _pairId(base, quote);\n\n        // Ensure it is more recent than the current value (implicit check for > 0) and not a future date\n        require(when > feed[pair].when && when <= getTimestamp(), ERROR_BAD_RATE_TIMESTAMP);\n        require(xrt > 0, ERROR_INVALID_RATE_VALUE); // Make sure xrt is not 0, as the math would break (Dividing by 0 sucks big time)\n        require(base != quote, ERROR_EQUAL_BASE_QUOTE_ADDRESSES); // Assumption that currency units are fungible and xrt should always be 1\n\n        bytes32 h = _setHash(base, quote, xrt, when);\n        require(h.personalRecover(sig) == operator, ERROR_BAD_SIGNATURE); // Make sure the update was signed by the operator\n\n        feed[pair] = Price(_pairXRT(base, quote, xrt), when);\n\n        emit SetRate(base, quote, xrt, when);\n    }\n\n    /**\n    * @notice Update the price for many pairs\n    * @dev If the number representation of bases is lower than the one for quotes, and update is cheaper, as less manipulation is required.\n    * @param bases Array of addresses for the base tokens in the feed\n    * @param quotes Array of addresses for the quote tokens bases are denominated in\n    * @param xrts Array of the exchange rates for bases denominated in quotes. 10^18 is considered 1 to allow for decimal calculations\n    * @param whens Array of timestamps for the exchange rate value\n    * @param sigs Bytes array with the ordered concatenated signatures for the updates\n    */\n    function updateMany(address[] bases, address[] quotes, uint128[] xrts, uint64[] whens, bytes sigs) public {\n        require(bases.length != 0, ERROR_BASE_ADDRESSES_LENGTH_ZERO);\n        require(bases.length == quotes.length, ERROR_QUOTE_ADDRESSES_LENGTH_MISMATCH);\n        require(bases.length == xrts.length, ERROR_RATE_VALUES_LENGTH_MISMATCH);\n        require(bases.length == whens.length, ERROR_RATE_TIMESTAMPS_LENGTH_MISMATCH);\n        require(bases.length == sigs.length / 65, ERROR_SIGNATURES_LENGTH_MISMATCH);\n        require(sigs.length % 65 == 0, ERROR_SIGNATURES_LENGTH_MISMATCH);\n\n        for (uint256 i = 0; i < bases.length; i++) {\n            // Extract the signature for the update from the concatenated sigs\n            bytes memory sig = new bytes(65);\n            uint256 needle = 32 + 65 * i; // where to start copying from sigs\n            assembly {\n                // copy 32 bytes at a time and just the last byte at the end\n                mstore(add(sig, 0x20), mload(add(sigs, needle)))\n                mstore(add(sig, 0x40), mload(add(sigs, add(needle, 0x20))))\n                // we have to mload the last 32 bytes of the sig, and mstore8 just gets the LSB for the word\n                mstore8(add(sig, 0x60), mload(add(sigs, add(needle, 0x21))))\n            }\n\n            update(bases[i], quotes[i], xrts[i], whens[i], sig);\n        }\n    }\n\n    function _setOperator(address _operator) internal {\n        require(_operator != address(0), ERROR_OPERATOR_ADDRESS_ZERO);\n        operator = _operator;\n        emit SetOperator(_operator);\n    }\n\n    function _setOperatorOwner(address _operatorOwner) internal {\n        require(_operatorOwner != address(0), ERROR_OPERATOR_OWNER_ADDRESS_ZERO);\n        operatorOwner = _operatorOwner;\n        emit SetOperatorOwner(_operatorOwner);\n    }\n\n    /**\n    * @dev Returns a unique id for each pair, regardless of the order of base and quote\n    */\n    function _pairId(address base, address quote) internal pure returns (bytes32) {\n        bool pairOrdered = _isPairOrdered(base, quote);\n        address orderedBase = pairOrdered ? base : quote;\n        address orderedQuote = pairOrdered ? quote : base;\n\n        return keccak256(abi.encodePacked(orderedBase, orderedQuote));\n    }\n\n    /**\n    * @dev Compute xrt depending on base and quote order.\n    */\n    function _pairXRT(address base, address quote, uint128 xrt) internal pure returns (uint128) {\n        bool pairOrdered = _isPairOrdered(base, quote);\n\n        return pairOrdered ? xrt : uint128((ONE**2 / uint256(xrt))); // If pair is not ordered, return the inverse\n    }\n\n    function _setHash(address base, address quote, uint128 xrt, uint64 when) internal pure returns (bytes32) {\n        return keccak256(abi.encodePacked(PPF_v1_ID, base, quote, xrt, when));\n    }\n\n    function _isPairOrdered(address base, address quote) private pure returns (bool) {\n        return base < quote;\n    }\n}\n",
  "sourcePath": "@aragon/ppf-contracts/contracts/PPF.sol",
  "ast": {
    "absolutePath": "@aragon/ppf-contracts/contracts/PPF.sol",
    "exportedSymbols": {
      "PPF": [
        14887
      ]
    },
    "id": 14888,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 14315,
        "literals": [
          "solidity",
          "0.4",
          ".24"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:64"
      },
      {
        "absolutePath": "@aragon/ppf-contracts/contracts/IFeed.sol",
        "file": "./IFeed.sol",
        "id": 14316,
        "nodeType": "ImportDirective",
        "scope": 14888,
        "sourceUnit": 14314,
        "src": "25:21:64",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@aragon/ppf-contracts/contracts/open-zeppelin/ECRecovery.sol",
        "file": "./open-zeppelin/ECRecovery.sol",
        "id": 14317,
        "nodeType": "ImportDirective",
        "scope": 14888,
        "sourceUnit": 14986,
        "src": "47:40:64",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@aragon/os/contracts/common/TimeHelpers.sol",
        "file": "@aragon/os/contracts/common/TimeHelpers.sol",
        "id": 14318,
        "nodeType": "ImportDirective",
        "scope": 14888,
        "sourceUnit": 11201,
        "src": "88:53:64",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 14319,
              "name": "IFeed",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 14313,
              "src": "160:5:64",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IFeed_$14313",
                "typeString": "contract IFeed"
              }
            },
            "id": 14320,
            "nodeType": "InheritanceSpecifier",
            "src": "160:5:64"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 14321,
              "name": "TimeHelpers",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 11200,
              "src": "167:11:64",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_TimeHelpers_$11200",
                "typeString": "contract TimeHelpers"
              }
            },
            "id": 14322,
            "nodeType": "InheritanceSpecifier",
            "src": "167:11:64"
          }
        ],
        "contractDependencies": [
          11200,
          14313
        ],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 14887,
        "linearizedBaseContracts": [
          14887,
          11200,
          14313
        ],
        "name": "PPF",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 14325,
            "libraryName": {
              "contractScope": null,
              "id": 14323,
              "name": "ECRecovery",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 14985,
              "src": "191:10:64",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ECRecovery_$14985",
                "typeString": "library ECRecovery"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "185:29:64",
            "typeName": {
              "id": 14324,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "206:7:64",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            }
          },
          {
            "constant": true,
            "id": 14328,
            "name": "PPF_v1_ID",
            "nodeType": "VariableDeclaration",
            "scope": 14887,
            "src": "220:102:64",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 14326,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "220:7:64",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "307833336138626137323032323330666131636565326161633762616333323239333965646337626130613438623039383933333561356638376135373730333639",
              "id": 14327,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "256:66:64",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_23366072383108825342417459513493892810738344165112321217906389262128385557353_by_1",
                "typeString": "int_const 2336...(69 digits omitted)...7353"
              },
              "value": "0x33a8ba7202230fa1cee2aac7bac322939edc7ba0a48b0989335a5f87a5770369"
            },
            "visibility": "public"
          },
          {
            "constant": true,
            "id": 14333,
            "name": "ONE",
            "nodeType": "VariableDeclaration",
            "scope": 14887,
            "src": "352:40:64",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 14329,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "352:7:64",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "argumentTypes": null,
              "commonType": {
                "typeIdentifier": "t_rational_1000000000000000000_by_1",
                "typeString": "int_const 1000000000000000000"
              },
              "id": 14332,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "lValueRequested": false,
              "leftExpression": {
                "argumentTypes": null,
                "hexValue": "3130",
                "id": 14330,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "kind": "number",
                "lValueRequested": false,
                "nodeType": "Literal",
                "src": "384:2:64",
                "subdenomination": null,
                "typeDescriptions": {
                  "typeIdentifier": "t_rational_10_by_1",
                  "typeString": "int_const 10"
                },
                "value": "10"
              },
              "nodeType": "BinaryOperation",
              "operator": "**",
              "rightExpression": {
                "argumentTypes": null,
                "hexValue": "3138",
                "id": 14331,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "kind": "number",
                "lValueRequested": false,
                "nodeType": "Literal",
                "src": "390:2:64",
                "subdenomination": null,
                "typeDescriptions": {
                  "typeIdentifier": "t_rational_18_by_1",
                  "typeString": "int_const 18"
                },
                "value": "18"
              },
              "src": "384:8:64",
              "typeDescriptions": {
                "typeIdentifier": "t_rational_1000000000000000000_by_1",
                "typeString": "int_const 1000000000000000000"
              }
            },
            "visibility": "internal"
          },
          {
            "constant": true,
            "id": 14336,
            "name": "ERROR_BAD_SIGNATURE",
            "nodeType": "VariableDeclaration",
            "scope": 14887,
            "src": "476:65:64",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 14334,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "476:6:64",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "5050465f4241445f5349474e4154555245",
              "id": 14335,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "522:19:64",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_7b0b7328ad48c7b774318abef5c8d86396430851fed527b9a87750455861ccee",
                "typeString": "literal_string \"PPF_BAD_SIGNATURE\""
              },
              "value": "PPF_BAD_SIGNATURE"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 14339,
            "name": "ERROR_BAD_RATE_TIMESTAMP",
            "nodeType": "VariableDeclaration",
            "scope": 14887,
            "src": "547:75:64",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 14337,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "547:6:64",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "5050465f4241445f524154455f54494d455354414d50",
              "id": 14338,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "598:24:64",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_2758805d1f6a36dfce0f9419493d8e693b0ba6eec71ac32432b85095c56cde9a",
                "typeString": "literal_string \"PPF_BAD_RATE_TIMESTAMP\""
              },
              "value": "PPF_BAD_RATE_TIMESTAMP"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 14342,
            "name": "ERROR_INVALID_RATE_VALUE",
            "nodeType": "VariableDeclaration",
            "scope": 14887,
            "src": "628:75:64",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 14340,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "628:6:64",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "5050465f494e56414c49445f524154455f56414c5545",
              "id": 14341,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "679:24:64",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_10586e50f7aab22f74c122471da01c525e7332f0941890f5261ae95d686b7d2c",
                "typeString": "literal_string \"PPF_INVALID_RATE_VALUE\""
              },
              "value": "PPF_INVALID_RATE_VALUE"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 14345,
            "name": "ERROR_EQUAL_BASE_QUOTE_ADDRESSES",
            "nodeType": "VariableDeclaration",
            "scope": 14887,
            "src": "709:91:64",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 14343,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "709:6:64",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "5050465f455155414c5f424153455f51554f54455f414444524553534553",
              "id": 14344,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "768:32:64",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_23a28b68aa6bb31c92260c270ffc7f831c77a686656f925c41974304d0ff6e05",
                "typeString": "literal_string \"PPF_EQUAL_BASE_QUOTE_ADDRESSES\""
              },
              "value": "PPF_EQUAL_BASE_QUOTE_ADDRESSES"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 14348,
            "name": "ERROR_BASE_ADDRESSES_LENGTH_ZERO",
            "nodeType": "VariableDeclaration",
            "scope": 14887,
            "src": "806:88:64",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 14346,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "806:6:64",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "5050465f424153455f4144445245535345535f4c454e5f5a45524f",
              "id": 14347,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "865:29:64",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_cee7f0ac9ef2ce23b0657250328cf277540de4bcd0cf7a753b2f0036a7f3f1fe",
                "typeString": "literal_string \"PPF_BASE_ADDRESSES_LEN_ZERO\""
              },
              "value": "PPF_BASE_ADDRESSES_LEN_ZERO"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 14351,
            "name": "ERROR_QUOTE_ADDRESSES_LENGTH_MISMATCH",
            "nodeType": "VariableDeclaration",
            "scope": 14887,
            "src": "900:98:64",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 14349,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "900:6:64",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "5050465f51554f54455f4144445245535345535f4c454e5f4d49534d41544348",
              "id": 14350,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "964:34:64",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_c8a9988f898e88e5437004b35d2c2bfbe98475c914213db03f2ba51fc8a24872",
                "typeString": "literal_string \"PPF_QUOTE_ADDRESSES_LEN_MISMATCH\""
              },
              "value": "PPF_QUOTE_ADDRESSES_LEN_MISMATCH"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 14354,
            "name": "ERROR_RATE_VALUES_LENGTH_MISMATCH",
            "nodeType": "VariableDeclaration",
            "scope": 14887,
            "src": "1004:90:64",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 14352,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "1004:6:64",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "5050465f524154455f56414c5545535f4c454e5f4d49534d41544348",
              "id": 14353,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1064:30:64",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_630bc233bc5591ff487c414585a6e1e16c138a8f636e4440f99fd7496aeea322",
                "typeString": "literal_string \"PPF_RATE_VALUES_LEN_MISMATCH\""
              },
              "value": "PPF_RATE_VALUES_LEN_MISMATCH"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 14357,
            "name": "ERROR_RATE_TIMESTAMPS_LENGTH_MISMATCH",
            "nodeType": "VariableDeclaration",
            "scope": 14887,
            "src": "1100:98:64",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 14355,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "1100:6:64",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "5050465f524154455f54494d455354414d50535f4c454e5f4d49534d41544348",
              "id": 14356,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1164:34:64",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_91eb6e0c8a3ec39f328182aeafd093e1b2ddf60fbbe78c4d435a19f97fdaca16",
                "typeString": "literal_string \"PPF_RATE_TIMESTAMPS_LEN_MISMATCH\""
              },
              "value": "PPF_RATE_TIMESTAMPS_LEN_MISMATCH"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 14360,
            "name": "ERROR_SIGNATURES_LENGTH_MISMATCH",
            "nodeType": "VariableDeclaration",
            "scope": 14887,
            "src": "1204:88:64",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 14358,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "1204:6:64",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "5050465f5349474e4154555245535f4c454e5f4d49534d41544348",
              "id": 14359,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1263:29:64",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_58fb34409fba308be7383d8069d0567c95c3a9f5c872446c0c608eeb7da2e719",
                "typeString": "literal_string \"PPF_SIGNATURES_LEN_MISMATCH\""
              },
              "value": "PPF_SIGNATURES_LEN_MISMATCH"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 14363,
            "name": "ERROR_CAN_NOT_SET_OPERATOR",
            "nodeType": "VariableDeclaration",
            "scope": 14887,
            "src": "1298:79:64",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 14361,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "1298:6:64",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "5050465f43414e5f4e4f545f5345545f4f50455241544f52",
              "id": 14362,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1351:26:64",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_00e5dd8790a8fb5ab61f36f5872cde3ddd22d7166c20c9af5bc5e412c9ac88ad",
                "typeString": "literal_string \"PPF_CAN_NOT_SET_OPERATOR\""
              },
              "value": "PPF_CAN_NOT_SET_OPERATOR"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 14366,
            "name": "ERROR_CAN_NOT_SET_OPERATOR_OWNER",
            "nodeType": "VariableDeclaration",
            "scope": 14887,
            "src": "1383:91:64",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 14364,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "1383:6:64",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "5050465f43414e5f4e4f545f5345545f4f50455241544f525f4f574e4552",
              "id": 14365,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1442:32:64",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_55299722daa070e827d92283d8bcbf1458260b7351d8df1cdf3ed75e54a20498",
                "typeString": "literal_string \"PPF_CAN_NOT_SET_OPERATOR_OWNER\""
              },
              "value": "PPF_CAN_NOT_SET_OPERATOR_OWNER"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 14369,
            "name": "ERROR_OPERATOR_ADDRESS_ZERO",
            "nodeType": "VariableDeclaration",
            "scope": 14887,
            "src": "1480:81:64",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 14367,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "1480:6:64",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "5050465f4f50455241544f525f414444524553535f5a45524f",
              "id": 14368,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1534:27:64",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_7dcceccf3733df11c1133065fbf959f756028f21772ec24577c8c3acda01fdd4",
                "typeString": "literal_string \"PPF_OPERATOR_ADDRESS_ZERO\""
              },
              "value": "PPF_OPERATOR_ADDRESS_ZERO"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 14372,
            "name": "ERROR_OPERATOR_OWNER_ADDRESS_ZERO",
            "nodeType": "VariableDeclaration",
            "scope": 14887,
            "src": "1567:93:64",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 14370,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "1567:6:64",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "5050465f4f50455241544f525f4f574e45525f414444524553535f5a45524f",
              "id": 14371,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1627:33:64",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_4976a274da686140a05a897ab45a9399d28a6ba8aa07b366c75a13149a4cff24",
                "typeString": "literal_string \"PPF_OPERATOR_OWNER_ADDRESS_ZERO\""
              },
              "value": "PPF_OPERATOR_OWNER_ADDRESS_ZERO"
            },
            "visibility": "private"
          },
          {
            "canonicalName": "PPF.Price",
            "id": 14377,
            "members": [
              {
                "constant": false,
                "id": 14374,
                "name": "xrt",
                "nodeType": "VariableDeclaration",
                "scope": 14377,
                "src": "1690:11:64",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint128",
                  "typeString": "uint128"
                },
                "typeName": {
                  "id": 14373,
                  "name": "uint128",
                  "nodeType": "ElementaryTypeName",
                  "src": "1690:7:64",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint128",
                    "typeString": "uint128"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 14376,
                "name": "when",
                "nodeType": "VariableDeclaration",
                "scope": 14377,
                "src": "1711:11:64",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint64",
                  "typeString": "uint64"
                },
                "typeName": {
                  "id": 14375,
                  "name": "uint64",
                  "nodeType": "ElementaryTypeName",
                  "src": "1711:6:64",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "Price",
            "nodeType": "StructDefinition",
            "scope": 14887,
            "src": "1667:62:64",
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 14379,
            "name": "operator",
            "nodeType": "VariableDeclaration",
            "scope": 14887,
            "src": "1735:23:64",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 14378,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "1735:7:64",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 14381,
            "name": "operatorOwner",
            "nodeType": "VariableDeclaration",
            "scope": 14887,
            "src": "1764:28:64",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 14380,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "1764:7:64",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 14385,
            "name": "feed",
            "nodeType": "VariableDeclaration",
            "scope": 14887,
            "src": "1798:40:64",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Price_$14377_storage_$",
              "typeString": "mapping(bytes32 => struct PPF.Price)"
            },
            "typeName": {
              "id": 14384,
              "keyType": {
                "id": 14382,
                "name": "bytes32",
                "nodeType": "ElementaryTypeName",
                "src": "1807:7:64",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                }
              },
              "nodeType": "Mapping",
              "src": "1798:26:64",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Price_$14377_storage_$",
                "typeString": "mapping(bytes32 => struct PPF.Price)"
              },
              "valueType": {
                "contractScope": null,
                "id": 14383,
                "name": "Price",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 14377,
                "src": "1818:5:64",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_Price_$14377_storage_ptr",
                  "typeString": "struct PPF.Price"
                }
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 14395,
            "name": "SetRate",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 14394,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14387,
                  "indexed": true,
                  "name": "base",
                  "nodeType": "VariableDeclaration",
                  "scope": 14395,
                  "src": "1859:20:64",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 14386,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1859:7:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 14389,
                  "indexed": true,
                  "name": "quote",
                  "nodeType": "VariableDeclaration",
                  "scope": 14395,
                  "src": "1881:21:64",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 14388,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1881:7:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 14391,
                  "indexed": false,
                  "name": "xrt",
                  "nodeType": "VariableDeclaration",
                  "scope": 14395,
                  "src": "1904:11:64",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 14390,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1904:7:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 14393,
                  "indexed": false,
                  "name": "when",
                  "nodeType": "VariableDeclaration",
                  "scope": 14395,
                  "src": "1917:11:64",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 14392,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "1917:6:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1858:71:64"
            },
            "src": "1845:85:64"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 14399,
            "name": "SetOperator",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 14398,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14397,
                  "indexed": true,
                  "name": "operator",
                  "nodeType": "VariableDeclaration",
                  "scope": 14399,
                  "src": "1953:24:64",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 14396,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1953:7:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1952:26:64"
            },
            "src": "1935:44:64"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 14403,
            "name": "SetOperatorOwner",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 14402,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14401,
                  "indexed": true,
                  "name": "operatorOwner",
                  "nodeType": "VariableDeclaration",
                  "scope": 14403,
                  "src": "2007:29:64",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 14400,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2007:7:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2006:31:64"
            },
            "src": "1984:54:64"
          },
          {
            "body": {
              "id": 14418,
              "nodeType": "Block",
              "src": "2284:83:64",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 14411,
                        "name": "_operator",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14405,
                        "src": "2307:9:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 14410,
                      "name": "_setOperator",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14752,
                      "src": "2294:12:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 14412,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2294:23:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 14413,
                  "nodeType": "ExpressionStatement",
                  "src": "2294:23:64"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 14415,
                        "name": "_operatorOwner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14407,
                        "src": "2345:14:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 14414,
                      "name": "_setOperatorOwner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14775,
                      "src": "2327:17:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 14416,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2327:33:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 14417,
                  "nodeType": "ExpressionStatement",
                  "src": "2327:33:64"
                }
              ]
            },
            "documentation": "@param _operator Public key allowed to sign messages to update the pricefeed\n@param _operatorOwner Address of an account that can change the operator",
            "id": 14419,
            "implemented": true,
            "isConstructor": true,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 14408,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14405,
                  "name": "_operator",
                  "nodeType": "VariableDeclaration",
                  "scope": 14419,
                  "src": "2234:17:64",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 14404,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2234:7:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 14407,
                  "name": "_operatorOwner",
                  "nodeType": "VariableDeclaration",
                  "scope": 14419,
                  "src": "2253:22:64",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 14406,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2253:7:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2233:43:64"
            },
            "payable": false,
            "returnParameters": {
              "id": 14409,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2284:0:64"
            },
            "scope": 14887,
            "src": "2221:146:64",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 14441,
              "nodeType": "Block",
              "src": "2573:314:64",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 14433,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 14428,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 14425,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 15153,
                              "src": "2765:3:64",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 14426,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "2765:10:64",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 14427,
                            "name": "operator",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14379,
                            "src": "2779:8:64",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "2765:22:64",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "||",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 14432,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 14429,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 15153,
                              "src": "2791:3:64",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 14430,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "2791:10:64",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 14431,
                            "name": "operatorOwner",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14381,
                            "src": "2805:13:64",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "2791:27:64",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "2765:53:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 14434,
                        "name": "ERROR_CAN_NOT_SET_OPERATOR",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14363,
                        "src": "2820:26:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 14424,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        15156,
                        15157
                      ],
                      "referencedDeclaration": 15157,
                      "src": "2757:7:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 14435,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2757:90:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 14436,
                  "nodeType": "ExpressionStatement",
                  "src": "2757:90:64"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 14438,
                        "name": "_operator",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14421,
                        "src": "2870:9:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 14437,
                      "name": "_setOperator",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14752,
                      "src": "2857:12:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 14439,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2857:23:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 14440,
                  "nodeType": "ExpressionStatement",
                  "src": "2857:23:64"
                }
              ]
            },
            "documentation": "@notice Set operator public key to `_operator`\n@param _operator Public key allowed to sign messages to update the pricefeed",
            "id": 14442,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "setOperator",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 14422,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14421,
                  "name": "_operator",
                  "nodeType": "VariableDeclaration",
                  "scope": 14442,
                  "src": "2545:17:64",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 14420,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2545:7:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2544:19:64"
            },
            "payable": false,
            "returnParameters": {
              "id": 14423,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2573:0:64"
            },
            "scope": 14887,
            "src": "2524:363:64",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 14459,
              "nodeType": "Block",
              "src": "3099:130:64",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 14451,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 14448,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 15153,
                            "src": "3117:3:64",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 14449,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "3117:10:64",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 14450,
                          "name": "operatorOwner",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 14381,
                          "src": "3131:13:64",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "3117:27:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 14452,
                        "name": "ERROR_CAN_NOT_SET_OPERATOR_OWNER",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14366,
                        "src": "3146:32:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 14447,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        15156,
                        15157
                      ],
                      "referencedDeclaration": 15157,
                      "src": "3109:7:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 14453,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3109:70:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 14454,
                  "nodeType": "ExpressionStatement",
                  "src": "3109:70:64"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 14456,
                        "name": "_operatorOwner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14444,
                        "src": "3207:14:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 14455,
                      "name": "_setOperatorOwner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14775,
                      "src": "3189:17:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 14457,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3189:33:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 14458,
                  "nodeType": "ExpressionStatement",
                  "src": "3189:33:64"
                }
              ]
            },
            "documentation": "@notice Set operator owner to `_operatorOwner`\n@param _operatorOwner Address of an account that can change the operator",
            "id": 14460,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "setOperatorOwner",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 14445,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14444,
                  "name": "_operatorOwner",
                  "nodeType": "VariableDeclaration",
                  "scope": 14460,
                  "src": "3066:22:64",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 14443,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3066:7:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3065:24:64"
            },
            "payable": false,
            "returnParameters": {
              "id": 14446,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3099:0:64"
            },
            "scope": 14887,
            "src": "3040:189:64",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 14512,
              "nodeType": "Block",
              "src": "3534:326:64",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 14473,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 14471,
                      "name": "base",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14462,
                      "src": "3548:4:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 14472,
                      "name": "quote",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14464,
                      "src": "3556:5:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "3548:13:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 14482,
                  "nodeType": "IfStatement",
                  "src": "3544:83:64",
                  "trueBody": {
                    "id": 14481,
                    "nodeType": "Block",
                    "src": "3563:64:64",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 14475,
                                  "name": "ONE",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 14333,
                                  "src": "3593:3:64",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 14474,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "3585:7:64",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_uint128_$",
                                  "typeString": "type(uint128)"
                                },
                                "typeName": "uint128"
                              },
                              "id": 14476,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3585:12:64",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint128",
                                "typeString": "uint128"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "id": 14477,
                                "name": "getTimestamp64",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 11199,
                                "src": "3599:14:64",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$__$returns$_t_uint64_$",
                                  "typeString": "function () view returns (uint64)"
                                }
                              },
                              "id": 14478,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3599:16:64",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint64",
                                "typeString": "uint64"
                              }
                            }
                          ],
                          "id": 14479,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "3584:32:64",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_uint128_$_t_uint64_$",
                            "typeString": "tuple(uint128,uint64)"
                          }
                        },
                        "functionReturnParameters": 14470,
                        "id": 14480,
                        "nodeType": "Return",
                        "src": "3577:39:64"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    14484
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 14484,
                      "name": "price",
                      "nodeType": "VariableDeclaration",
                      "scope": 14513,
                      "src": "3637:19:64",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Price_$14377_storage_ptr",
                        "typeString": "struct PPF.Price"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 14483,
                        "name": "Price",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 14377,
                        "src": "3637:5:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Price_$14377_storage_ptr",
                          "typeString": "struct PPF.Price"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 14491,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 14485,
                      "name": "feed",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14385,
                      "src": "3659:4:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Price_$14377_storage_$",
                        "typeString": "mapping(bytes32 => struct PPF.Price storage ref)"
                      }
                    },
                    "id": 14490,
                    "indexExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 14487,
                          "name": "base",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 14462,
                          "src": "3672:4:64",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 14488,
                          "name": "quote",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 14464,
                          "src": "3678:5:64",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 14486,
                        "name": "_pairId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14814,
                        "src": "3664:7:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_address_$_t_address_$returns$_t_bytes32_$",
                          "typeString": "function (address,address) pure returns (bytes32)"
                        }
                      },
                      "id": 14489,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "3664:20:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "3659:26:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Price_$14377_storage",
                      "typeString": "struct PPF.Price storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3637:48:64"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    },
                    "id": 14495,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 14492,
                        "name": "price",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14484,
                        "src": "3735:5:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Price_$14377_storage_ptr",
                          "typeString": "struct PPF.Price storage pointer"
                        }
                      },
                      "id": 14493,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "when",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 14376,
                      "src": "3735:10:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 14494,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3749:1:64",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "3735:15:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 14501,
                  "nodeType": "IfStatement",
                  "src": "3731:59:64",
                  "trueBody": {
                    "id": 14500,
                    "nodeType": "Block",
                    "src": "3752:38:64",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 14496,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3774:1:64",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 14497,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3777:1:64",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "id": 14498,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "3773:6:64",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_rational_0_by_1_$_t_rational_0_by_1_$",
                            "typeString": "tuple(int_const 0,int_const 0)"
                          }
                        },
                        "functionReturnParameters": 14470,
                        "id": 14499,
                        "nodeType": "Return",
                        "src": "3766:13:64"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "components": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 14503,
                            "name": "base",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14462,
                            "src": "3817:4:64",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 14504,
                            "name": "quote",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14464,
                            "src": "3823:5:64",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 14505,
                              "name": "price",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 14484,
                              "src": "3830:5:64",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Price_$14377_storage_ptr",
                                "typeString": "struct PPF.Price storage pointer"
                              }
                            },
                            "id": 14506,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "xrt",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 14374,
                            "src": "3830:9:64",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint128",
                              "typeString": "uint128"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_uint128",
                              "typeString": "uint128"
                            }
                          ],
                          "id": 14502,
                          "name": "_pairXRT",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 14847,
                          "src": "3808:8:64",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_address_$_t_address_$_t_uint128_$returns$_t_uint128_$",
                            "typeString": "function (address,address,uint128) pure returns (uint128)"
                          }
                        },
                        "id": 14507,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3808:32:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 14508,
                          "name": "price",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 14484,
                          "src": "3842:5:64",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Price_$14377_storage_ptr",
                            "typeString": "struct PPF.Price storage pointer"
                          }
                        },
                        "id": 14509,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "when",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 14376,
                        "src": "3842:10:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      }
                    ],
                    "id": 14510,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "3807:46:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint128_$_t_uint64_$",
                      "typeString": "tuple(uint128,uint64)"
                    }
                  },
                  "functionReturnParameters": 14470,
                  "id": 14511,
                  "nodeType": "Return",
                  "src": "3800:53:64"
                }
              ]
            },
            "documentation": "@param base Address for the base token in the feed\n@param quote Address for the quote token the base is denominated in\n@return XRT for base:quote and the timestamp when it was updated",
            "id": 14513,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "get",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 14465,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14462,
                  "name": "base",
                  "nodeType": "VariableDeclaration",
                  "scope": 14513,
                  "src": "3465:12:64",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 14461,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3465:7:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 14464,
                  "name": "quote",
                  "nodeType": "VariableDeclaration",
                  "scope": 14513,
                  "src": "3479:13:64",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 14463,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3479:7:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3464:29:64"
            },
            "payable": false,
            "returnParameters": {
              "id": 14470,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14467,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 14513,
                  "src": "3517:7:64",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint128",
                    "typeString": "uint128"
                  },
                  "typeName": {
                    "id": 14466,
                    "name": "uint128",
                    "nodeType": "ElementaryTypeName",
                    "src": "3517:7:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint128",
                      "typeString": "uint128"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 14469,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 14513,
                  "src": "3526:6:64",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 14468,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "3526:6:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3516:17:64"
            },
            "scope": 14887,
            "src": "3452:408:64",
            "stateMutability": "view",
            "superFunction": 14312,
            "visibility": "external"
          },
          {
            "body": {
              "id": 14520,
              "nodeType": "Block",
              "src": "4008:27:64",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 14518,
                    "name": "ONE",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 14333,
                    "src": "4025:3:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 14517,
                  "id": 14519,
                  "nodeType": "Return",
                  "src": "4018:10:64"
                }
              ]
            },
            "documentation": "@return The minimum rate precision used for the exchange rates",
            "id": 14521,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "ratePrecision",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 14514,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3973:2:64"
            },
            "payable": false,
            "returnParameters": {
              "id": 14517,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14516,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 14521,
                  "src": "3999:7:64",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 14515,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3999:7:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3998:9:64"
            },
            "scope": 14887,
            "src": "3951:84:64",
            "stateMutability": "pure",
            "superFunction": 14301,
            "visibility": "external"
          },
          {
            "body": {
              "id": 14609,
              "nodeType": "Block",
              "src": "4845:816:64",
              "statements": [
                {
                  "assignments": [
                    14535
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 14535,
                      "name": "pair",
                      "nodeType": "VariableDeclaration",
                      "scope": 14610,
                      "src": "4855:12:64",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 14534,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "4855:7:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 14540,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 14537,
                        "name": "base",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14523,
                        "src": "4878:4:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 14538,
                        "name": "quote",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14525,
                        "src": "4884:5:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 14536,
                      "name": "_pairId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14814,
                      "src": "4870:7:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_address_$_t_address_$returns$_t_bytes32_$",
                        "typeString": "function (address,address) pure returns (bytes32)"
                      }
                    },
                    "id": 14539,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4870:20:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4855:35:64"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 14552,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          },
                          "id": 14547,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 14542,
                            "name": "when",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14529,
                            "src": "5015:4:64",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 14543,
                                "name": "feed",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 14385,
                                "src": "5022:4:64",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Price_$14377_storage_$",
                                  "typeString": "mapping(bytes32 => struct PPF.Price storage ref)"
                                }
                              },
                              "id": 14545,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 14544,
                                "name": "pair",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 14535,
                                "src": "5027:4:64",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "5022:10:64",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Price_$14377_storage",
                                "typeString": "struct PPF.Price storage ref"
                              }
                            },
                            "id": 14546,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "when",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 14376,
                            "src": "5022:15:64",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          },
                          "src": "5015:22:64",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 14551,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 14548,
                            "name": "when",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14529,
                            "src": "5041:4:64",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 14549,
                              "name": "getTimestamp",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 11188,
                              "src": "5049:12:64",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                                "typeString": "function () view returns (uint256)"
                              }
                            },
                            "id": 14550,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "5049:14:64",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "5041:22:64",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "5015:48:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 14553,
                        "name": "ERROR_BAD_RATE_TIMESTAMP",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14339,
                        "src": "5065:24:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 14541,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        15156,
                        15157
                      ],
                      "referencedDeclaration": 15157,
                      "src": "5007:7:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 14554,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5007:83:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 14555,
                  "nodeType": "ExpressionStatement",
                  "src": "5007:83:64"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        },
                        "id": 14559,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 14557,
                          "name": "xrt",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 14527,
                          "src": "5108:3:64",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 14558,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "5114:1:64",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "5108:7:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 14560,
                        "name": "ERROR_INVALID_RATE_VALUE",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14342,
                        "src": "5117:24:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 14556,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        15156,
                        15157
                      ],
                      "referencedDeclaration": 15157,
                      "src": "5100:7:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 14561,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5100:42:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 14562,
                  "nodeType": "ExpressionStatement",
                  "src": "5100:42:64"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 14566,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 14564,
                          "name": "base",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 14523,
                          "src": "5242:4:64",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 14565,
                          "name": "quote",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 14525,
                          "src": "5250:5:64",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "5242:13:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 14567,
                        "name": "ERROR_EQUAL_BASE_QUOTE_ADDRESSES",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14345,
                        "src": "5257:32:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 14563,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        15156,
                        15157
                      ],
                      "referencedDeclaration": 15157,
                      "src": "5234:7:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 14568,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5234:56:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 14569,
                  "nodeType": "ExpressionStatement",
                  "src": "5234:56:64"
                },
                {
                  "assignments": [
                    14571
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 14571,
                      "name": "h",
                      "nodeType": "VariableDeclaration",
                      "scope": 14610,
                      "src": "5375:9:64",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 14570,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "5375:7:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 14578,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 14573,
                        "name": "base",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14523,
                        "src": "5396:4:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 14574,
                        "name": "quote",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14525,
                        "src": "5402:5:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 14575,
                        "name": "xrt",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14527,
                        "src": "5409:3:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 14576,
                        "name": "when",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14529,
                        "src": "5414:4:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        },
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      ],
                      "id": 14572,
                      "name": "_setHash",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14872,
                      "src": "5387:8:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_address_$_t_address_$_t_uint128_$_t_uint64_$returns$_t_bytes32_$",
                        "typeString": "function (address,address,uint128,uint64) pure returns (bytes32)"
                      }
                    },
                    "id": 14577,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5387:32:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5375:44:64"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 14585,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 14582,
                              "name": "sig",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 14531,
                              "src": "5455:3:64",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 14580,
                              "name": "h",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 14571,
                              "src": "5437:1:64",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "id": 14581,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "personalRecover",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 14906,
                            "src": "5437:17:64",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_address_$bound_to$_t_bytes32_$",
                              "typeString": "function (bytes32,bytes memory) pure returns (address)"
                            }
                          },
                          "id": 14583,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5437:22:64",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 14584,
                          "name": "operator",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 14379,
                          "src": "5463:8:64",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "5437:34:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 14586,
                        "name": "ERROR_BAD_SIGNATURE",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14336,
                        "src": "5473:19:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 14579,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        15156,
                        15157
                      ],
                      "referencedDeclaration": 15157,
                      "src": "5429:7:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 14587,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5429:64:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 14588,
                  "nodeType": "ExpressionStatement",
                  "src": "5429:64:64"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 14600,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 14589,
                        "name": "feed",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14385,
                        "src": "5555:4:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Price_$14377_storage_$",
                          "typeString": "mapping(bytes32 => struct PPF.Price storage ref)"
                        }
                      },
                      "id": 14591,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 14590,
                        "name": "pair",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14535,
                        "src": "5560:4:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "5555:10:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Price_$14377_storage",
                        "typeString": "struct PPF.Price storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 14594,
                              "name": "base",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 14523,
                              "src": "5583:4:64",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 14595,
                              "name": "quote",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 14525,
                              "src": "5589:5:64",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 14596,
                              "name": "xrt",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 14527,
                              "src": "5596:3:64",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint128",
                                "typeString": "uint128"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint128",
                                "typeString": "uint128"
                              }
                            ],
                            "id": 14593,
                            "name": "_pairXRT",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14847,
                            "src": "5574:8:64",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_address_$_t_address_$_t_uint128_$returns$_t_uint128_$",
                              "typeString": "function (address,address,uint128) pure returns (uint128)"
                            }
                          },
                          "id": 14597,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5574:26:64",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 14598,
                          "name": "when",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 14529,
                          "src": "5602:4:64",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          },
                          {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        ],
                        "id": 14592,
                        "name": "Price",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14377,
                        "src": "5568:5:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_struct$_Price_$14377_storage_ptr_$",
                          "typeString": "type(struct PPF.Price storage pointer)"
                        }
                      },
                      "id": 14599,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "structConstructorCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "5568:39:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Price_$14377_memory",
                        "typeString": "struct PPF.Price memory"
                      }
                    },
                    "src": "5555:52:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Price_$14377_storage",
                      "typeString": "struct PPF.Price storage ref"
                    }
                  },
                  "id": 14601,
                  "nodeType": "ExpressionStatement",
                  "src": "5555:52:64"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 14603,
                        "name": "base",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14523,
                        "src": "5631:4:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 14604,
                        "name": "quote",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14525,
                        "src": "5637:5:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 14605,
                        "name": "xrt",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14527,
                        "src": "5644:3:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 14606,
                        "name": "when",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14529,
                        "src": "5649:4:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        },
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      ],
                      "id": 14602,
                      "name": "SetRate",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14395,
                      "src": "5623:7:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint64_$returns$__$",
                        "typeString": "function (address,address,uint256,uint64)"
                      }
                    },
                    "id": 14607,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5623:31:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 14608,
                  "nodeType": "EmitStatement",
                  "src": "5618:36:64"
                }
              ]
            },
            "documentation": "@notice Update the price for the `base + ':' + quote` feed with an exchange rate of `xrt / ONE` for time `when`\n@dev If the number representation of base is lower than the one for quote, and update is cheaper, as less manipulation is required.\n@param base Address for the base token in the feed\n@param quote Address for the quote token the base is denominated in\n@param xrt Exchange rate for base denominated in quote. 10^18 is considered 1 to allow for decimal calculations\n@param when Timestamp for the exchange rate value\n@param sig Signature payload (EIP191) from operator, concatenated [  r  ][  s  ][v]. See _setHash function for the hash calculation.",
            "id": 14610,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "update",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 14532,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14523,
                  "name": "base",
                  "nodeType": "VariableDeclaration",
                  "scope": 14610,
                  "src": "4772:12:64",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 14522,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4772:7:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 14525,
                  "name": "quote",
                  "nodeType": "VariableDeclaration",
                  "scope": 14610,
                  "src": "4786:13:64",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 14524,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4786:7:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 14527,
                  "name": "xrt",
                  "nodeType": "VariableDeclaration",
                  "scope": 14610,
                  "src": "4801:11:64",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint128",
                    "typeString": "uint128"
                  },
                  "typeName": {
                    "id": 14526,
                    "name": "uint128",
                    "nodeType": "ElementaryTypeName",
                    "src": "4801:7:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint128",
                      "typeString": "uint128"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 14529,
                  "name": "when",
                  "nodeType": "VariableDeclaration",
                  "scope": 14610,
                  "src": "4814:11:64",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 14528,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "4814:6:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 14531,
                  "name": "sig",
                  "nodeType": "VariableDeclaration",
                  "scope": 14610,
                  "src": "4827:9:64",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 14530,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "4827:5:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4771:66:64"
            },
            "payable": false,
            "returnParameters": {
              "id": 14533,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4845:0:64"
            },
            "scope": 14887,
            "src": "4756:905:64",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 14728,
              "nodeType": "Block",
              "src": "6418:1264:64",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 14631,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 14628,
                            "name": "bases",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14613,
                            "src": "6436:5:64",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                              "typeString": "address[] memory"
                            }
                          },
                          "id": 14629,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "6436:12:64",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 14630,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "6452:1:64",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "6436:17:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 14632,
                        "name": "ERROR_BASE_ADDRESSES_LENGTH_ZERO",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14348,
                        "src": "6455:32:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 14627,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        15156,
                        15157
                      ],
                      "referencedDeclaration": 15157,
                      "src": "6428:7:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 14633,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6428:60:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 14634,
                  "nodeType": "ExpressionStatement",
                  "src": "6428:60:64"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 14640,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 14636,
                            "name": "bases",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14613,
                            "src": "6506:5:64",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                              "typeString": "address[] memory"
                            }
                          },
                          "id": 14637,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "6506:12:64",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 14638,
                            "name": "quotes",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14616,
                            "src": "6522:6:64",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                              "typeString": "address[] memory"
                            }
                          },
                          "id": 14639,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "6522:13:64",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "6506:29:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 14641,
                        "name": "ERROR_QUOTE_ADDRESSES_LENGTH_MISMATCH",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14351,
                        "src": "6537:37:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 14635,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        15156,
                        15157
                      ],
                      "referencedDeclaration": 15157,
                      "src": "6498:7:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 14642,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6498:77:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 14643,
                  "nodeType": "ExpressionStatement",
                  "src": "6498:77:64"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 14649,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 14645,
                            "name": "bases",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14613,
                            "src": "6593:5:64",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                              "typeString": "address[] memory"
                            }
                          },
                          "id": 14646,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "6593:12:64",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 14647,
                            "name": "xrts",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14619,
                            "src": "6609:4:64",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint128_$dyn_memory_ptr",
                              "typeString": "uint128[] memory"
                            }
                          },
                          "id": 14648,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "6609:11:64",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "6593:27:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 14650,
                        "name": "ERROR_RATE_VALUES_LENGTH_MISMATCH",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14354,
                        "src": "6622:33:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 14644,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        15156,
                        15157
                      ],
                      "referencedDeclaration": 15157,
                      "src": "6585:7:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 14651,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6585:71:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 14652,
                  "nodeType": "ExpressionStatement",
                  "src": "6585:71:64"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 14658,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 14654,
                            "name": "bases",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14613,
                            "src": "6674:5:64",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                              "typeString": "address[] memory"
                            }
                          },
                          "id": 14655,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "6674:12:64",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 14656,
                            "name": "whens",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14622,
                            "src": "6690:5:64",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint64_$dyn_memory_ptr",
                              "typeString": "uint64[] memory"
                            }
                          },
                          "id": 14657,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "6690:12:64",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "6674:28:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 14659,
                        "name": "ERROR_RATE_TIMESTAMPS_LENGTH_MISMATCH",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14357,
                        "src": "6704:37:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 14653,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        15156,
                        15157
                      ],
                      "referencedDeclaration": 15157,
                      "src": "6666:7:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 14660,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6666:76:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 14661,
                  "nodeType": "ExpressionStatement",
                  "src": "6666:76:64"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 14669,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 14663,
                            "name": "bases",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14613,
                            "src": "6760:5:64",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                              "typeString": "address[] memory"
                            }
                          },
                          "id": 14664,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "6760:12:64",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 14668,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 14665,
                              "name": "sigs",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 14624,
                              "src": "6776:4:64",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            "id": 14666,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "6776:11:64",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "/",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "3635",
                            "id": 14667,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "6790:2:64",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_65_by_1",
                              "typeString": "int_const 65"
                            },
                            "value": "65"
                          },
                          "src": "6776:16:64",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "6760:32:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 14670,
                        "name": "ERROR_SIGNATURES_LENGTH_MISMATCH",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14360,
                        "src": "6794:32:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 14662,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        15156,
                        15157
                      ],
                      "referencedDeclaration": 15157,
                      "src": "6752:7:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 14671,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6752:75:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 14672,
                  "nodeType": "ExpressionStatement",
                  "src": "6752:75:64"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 14679,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 14677,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 14674,
                              "name": "sigs",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 14624,
                              "src": "6845:4:64",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            "id": 14675,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "6845:11:64",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "%",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "3635",
                            "id": 14676,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "6859:2:64",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_65_by_1",
                              "typeString": "int_const 65"
                            },
                            "value": "65"
                          },
                          "src": "6845:16:64",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 14678,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "6865:1:64",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "6845:21:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 14680,
                        "name": "ERROR_SIGNATURES_LENGTH_MISMATCH",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14360,
                        "src": "6868:32:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 14673,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        15156,
                        15157
                      ],
                      "referencedDeclaration": 15157,
                      "src": "6837:7:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 14681,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6837:64:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 14682,
                  "nodeType": "ExpressionStatement",
                  "src": "6837:64:64"
                },
                {
                  "body": {
                    "id": 14726,
                    "nodeType": "Block",
                    "src": "6955:721:64",
                    "statements": [
                      {
                        "assignments": [
                          14695
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 14695,
                            "name": "sig",
                            "nodeType": "VariableDeclaration",
                            "scope": 14729,
                            "src": "7048:16:64",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes"
                            },
                            "typeName": {
                              "id": 14694,
                              "name": "bytes",
                              "nodeType": "ElementaryTypeName",
                              "src": "7048:5:64",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_storage_ptr",
                                "typeString": "bytes"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 14700,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "3635",
                              "id": 14698,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "7077:2:64",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_65_by_1",
                                "typeString": "int_const 65"
                              },
                              "value": "65"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_65_by_1",
                                "typeString": "int_const 65"
                              }
                            ],
                            "id": 14697,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "NewExpression",
                            "src": "7067:9:64",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_bytes_memory_$",
                              "typeString": "function (uint256) pure returns (bytes memory)"
                            },
                            "typeName": {
                              "id": 14696,
                              "name": "bytes",
                              "nodeType": "ElementaryTypeName",
                              "src": "7071:5:64",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_storage_ptr",
                                "typeString": "bytes"
                              }
                            }
                          },
                          "id": 14699,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7067:13:64",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory",
                            "typeString": "bytes memory"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "7048:32:64"
                      },
                      {
                        "assignments": [
                          14702
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 14702,
                            "name": "needle",
                            "nodeType": "VariableDeclaration",
                            "scope": 14729,
                            "src": "7094:14:64",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 14701,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "7094:7:64",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 14708,
                        "initialValue": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 14707,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "hexValue": "3332",
                            "id": 14703,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "7111:2:64",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_32_by_1",
                              "typeString": "int_const 32"
                            },
                            "value": "32"
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "+",
                          "rightExpression": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 14706,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "hexValue": "3635",
                              "id": 14704,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "7116:2:64",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_65_by_1",
                                "typeString": "int_const 65"
                              },
                              "value": "65"
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "*",
                            "rightExpression": {
                              "argumentTypes": null,
                              "id": 14705,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 14684,
                              "src": "7121:1:64",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "7116:6:64",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "7111:11:64",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "7094:28:64"
                      },
                      {
                        "externalReferences": [
                          {
                            "sig": {
                              "declaration": 14695,
                              "isOffset": false,
                              "isSlot": false,
                              "src": "7287:3:64",
                              "valueSize": 1
                            }
                          },
                          {
                            "sigs": {
                              "declaration": 14624,
                              "isOffset": false,
                              "isSlot": false,
                              "src": "7309:4:64",
                              "valueSize": 1
                            }
                          },
                          {
                            "needle": {
                              "declaration": 14702,
                              "isOffset": false,
                              "isSlot": false,
                              "src": "7315:6:64",
                              "valueSize": 1
                            }
                          },
                          {
                            "sig": {
                              "declaration": 14695,
                              "isOffset": false,
                              "isSlot": false,
                              "src": "7352:3:64",
                              "valueSize": 1
                            }
                          },
                          {
                            "sigs": {
                              "declaration": 14624,
                              "isOffset": false,
                              "isSlot": false,
                              "src": "7374:4:64",
                              "valueSize": 1
                            }
                          },
                          {
                            "needle": {
                              "declaration": 14702,
                              "isOffset": false,
                              "isSlot": false,
                              "src": "7384:6:64",
                              "valueSize": 1
                            }
                          },
                          {
                            "sig": {
                              "declaration": 14695,
                              "isOffset": false,
                              "isSlot": false,
                              "src": "7538:3:64",
                              "valueSize": 1
                            }
                          },
                          {
                            "sigs": {
                              "declaration": 14624,
                              "isOffset": false,
                              "isSlot": false,
                              "src": "7560:4:64",
                              "valueSize": 1
                            }
                          },
                          {
                            "needle": {
                              "declaration": 14702,
                              "isOffset": false,
                              "isSlot": false,
                              "src": "7570:6:64",
                              "valueSize": 1
                            }
                          }
                        ],
                        "id": 14709,
                        "nodeType": "InlineAssembly",
                        "operations": "{\n    mstore(add(sig, 0x20), mload(add(sigs, needle)))\n    mstore(add(sig, 0x40), mload(add(sigs, add(needle, 0x20))))\n    mstore8(add(sig, 0x60), mload(add(sigs, add(needle, 0x21))))\n}",
                        "src": "7172:448:64"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 14711,
                                "name": "bases",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 14613,
                                "src": "7621:5:64",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                  "typeString": "address[] memory"
                                }
                              },
                              "id": 14713,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 14712,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 14684,
                                "src": "7627:1:64",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "7621:8:64",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 14714,
                                "name": "quotes",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 14616,
                                "src": "7631:6:64",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                  "typeString": "address[] memory"
                                }
                              },
                              "id": 14716,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 14715,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 14684,
                                "src": "7638:1:64",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "7631:9:64",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 14717,
                                "name": "xrts",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 14619,
                                "src": "7642:4:64",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_uint128_$dyn_memory_ptr",
                                  "typeString": "uint128[] memory"
                                }
                              },
                              "id": 14719,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 14718,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 14684,
                                "src": "7647:1:64",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "7642:7:64",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint128",
                                "typeString": "uint128"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 14720,
                                "name": "whens",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 14622,
                                "src": "7651:5:64",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_uint64_$dyn_memory_ptr",
                                  "typeString": "uint64[] memory"
                                }
                              },
                              "id": 14722,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 14721,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 14684,
                                "src": "7657:1:64",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "7651:8:64",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint64",
                                "typeString": "uint64"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 14723,
                              "name": "sig",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 14695,
                              "src": "7661:3:64",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint128",
                                "typeString": "uint128"
                              },
                              {
                                "typeIdentifier": "t_uint64",
                                "typeString": "uint64"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "id": 14710,
                            "name": "update",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14610,
                            "src": "7614:6:64",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint128_$_t_uint64_$_t_bytes_memory_ptr_$returns$__$",
                              "typeString": "function (address,address,uint128,uint64,bytes memory)"
                            }
                          },
                          "id": 14724,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7614:51:64",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 14725,
                        "nodeType": "ExpressionStatement",
                        "src": "7614:51:64"
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 14690,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 14687,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14684,
                      "src": "6932:1:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 14688,
                        "name": "bases",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14613,
                        "src": "6936:5:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        }
                      },
                      "id": 14689,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "6936:12:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "6932:16:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 14727,
                  "initializationExpression": {
                    "assignments": [
                      14684
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 14684,
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "scope": 14729,
                        "src": "6917:9:64",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 14683,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "6917:7:64",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 14686,
                    "initialValue": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 14685,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "6929:1:64",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "6917:13:64"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 14692,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "6950:3:64",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 14691,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14684,
                        "src": "6950:1:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 14693,
                    "nodeType": "ExpressionStatement",
                    "src": "6950:3:64"
                  },
                  "nodeType": "ForStatement",
                  "src": "6912:764:64"
                }
              ]
            },
            "documentation": "@notice Update the price for many pairs\n@dev If the number representation of bases is lower than the one for quotes, and update is cheaper, as less manipulation is required.\n@param bases Array of addresses for the base tokens in the feed\n@param quotes Array of addresses for the quote tokens bases are denominated in\n@param xrts Array of the exchange rates for bases denominated in quotes. 10^18 is considered 1 to allow for decimal calculations\n@param whens Array of timestamps for the exchange rate value\n@param sigs Bytes array with the ordered concatenated signatures for the updates",
            "id": 14729,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "updateMany",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 14625,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14613,
                  "name": "bases",
                  "nodeType": "VariableDeclaration",
                  "scope": 14729,
                  "src": "6332:15:64",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 14611,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "6332:7:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 14612,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "6332:9:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 14616,
                  "name": "quotes",
                  "nodeType": "VariableDeclaration",
                  "scope": 14729,
                  "src": "6349:16:64",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 14614,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "6349:7:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 14615,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "6349:9:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 14619,
                  "name": "xrts",
                  "nodeType": "VariableDeclaration",
                  "scope": 14729,
                  "src": "6367:14:64",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint128_$dyn_memory_ptr",
                    "typeString": "uint128[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 14617,
                      "name": "uint128",
                      "nodeType": "ElementaryTypeName",
                      "src": "6367:7:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint128",
                        "typeString": "uint128"
                      }
                    },
                    "id": 14618,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "6367:9:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint128_$dyn_storage_ptr",
                      "typeString": "uint128[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 14622,
                  "name": "whens",
                  "nodeType": "VariableDeclaration",
                  "scope": 14729,
                  "src": "6383:14:64",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint64_$dyn_memory_ptr",
                    "typeString": "uint64[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 14620,
                      "name": "uint64",
                      "nodeType": "ElementaryTypeName",
                      "src": "6383:6:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "id": 14621,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "6383:8:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint64_$dyn_storage_ptr",
                      "typeString": "uint64[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 14624,
                  "name": "sigs",
                  "nodeType": "VariableDeclaration",
                  "scope": 14729,
                  "src": "6399:10:64",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 14623,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "6399:5:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6331:79:64"
            },
            "payable": false,
            "returnParameters": {
              "id": 14626,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6418:0:64"
            },
            "scope": 14887,
            "src": "6312:1370:64",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 14751,
              "nodeType": "Block",
              "src": "7738:145:64",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 14739,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 14735,
                          "name": "_operator",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 14731,
                          "src": "7756:9:64",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 14737,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "7777:1:64",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 14736,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "7769:7:64",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 14738,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7769:10:64",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "7756:23:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 14740,
                        "name": "ERROR_OPERATOR_ADDRESS_ZERO",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14369,
                        "src": "7781:27:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 14734,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        15156,
                        15157
                      ],
                      "referencedDeclaration": 15157,
                      "src": "7748:7:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 14741,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7748:61:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 14742,
                  "nodeType": "ExpressionStatement",
                  "src": "7748:61:64"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 14745,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 14743,
                      "name": "operator",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14379,
                      "src": "7819:8:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 14744,
                      "name": "_operator",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14731,
                      "src": "7830:9:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "7819:20:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 14746,
                  "nodeType": "ExpressionStatement",
                  "src": "7819:20:64"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 14748,
                        "name": "_operator",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14731,
                        "src": "7866:9:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 14747,
                      "name": "SetOperator",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14399,
                      "src": "7854:11:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 14749,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7854:22:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 14750,
                  "nodeType": "EmitStatement",
                  "src": "7849:27:64"
                }
              ]
            },
            "documentation": null,
            "id": 14752,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "_setOperator",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 14732,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14731,
                  "name": "_operator",
                  "nodeType": "VariableDeclaration",
                  "scope": 14752,
                  "src": "7710:17:64",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 14730,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7710:7:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7709:19:64"
            },
            "payable": false,
            "returnParameters": {
              "id": 14733,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7738:0:64"
            },
            "scope": 14887,
            "src": "7688:195:64",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 14774,
              "nodeType": "Block",
              "src": "7949:176:64",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 14762,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 14758,
                          "name": "_operatorOwner",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 14754,
                          "src": "7967:14:64",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 14760,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "7993:1:64",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 14759,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "7985:7:64",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 14761,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7985:10:64",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "7967:28:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 14763,
                        "name": "ERROR_OPERATOR_OWNER_ADDRESS_ZERO",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14372,
                        "src": "7997:33:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 14757,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        15156,
                        15157
                      ],
                      "referencedDeclaration": 15157,
                      "src": "7959:7:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 14764,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7959:72:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 14765,
                  "nodeType": "ExpressionStatement",
                  "src": "7959:72:64"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 14768,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 14766,
                      "name": "operatorOwner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14381,
                      "src": "8041:13:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 14767,
                      "name": "_operatorOwner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14754,
                      "src": "8057:14:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "8041:30:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 14769,
                  "nodeType": "ExpressionStatement",
                  "src": "8041:30:64"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 14771,
                        "name": "_operatorOwner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14754,
                        "src": "8103:14:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 14770,
                      "name": "SetOperatorOwner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14403,
                      "src": "8086:16:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 14772,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8086:32:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 14773,
                  "nodeType": "EmitStatement",
                  "src": "8081:37:64"
                }
              ]
            },
            "documentation": null,
            "id": 14775,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "_setOperatorOwner",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 14755,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14754,
                  "name": "_operatorOwner",
                  "nodeType": "VariableDeclaration",
                  "scope": 14775,
                  "src": "7916:22:64",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 14753,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7916:7:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7915:24:64"
            },
            "payable": false,
            "returnParameters": {
              "id": 14756,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7949:0:64"
            },
            "scope": 14887,
            "src": "7889:236:64",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 14813,
              "nodeType": "Block",
              "src": "8312:252:64",
              "statements": [
                {
                  "assignments": [
                    14785
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 14785,
                      "name": "pairOrdered",
                      "nodeType": "VariableDeclaration",
                      "scope": 14814,
                      "src": "8322:16:64",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 14784,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "8322:4:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 14790,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 14787,
                        "name": "base",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14777,
                        "src": "8356:4:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 14788,
                        "name": "quote",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14779,
                        "src": "8362:5:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 14786,
                      "name": "_isPairOrdered",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14886,
                      "src": "8341:14:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_address_$_t_address_$returns$_t_bool_$",
                        "typeString": "function (address,address) pure returns (bool)"
                      }
                    },
                    "id": 14789,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8341:27:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8322:46:64"
                },
                {
                  "assignments": [
                    14792
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 14792,
                      "name": "orderedBase",
                      "nodeType": "VariableDeclaration",
                      "scope": 14814,
                      "src": "8378:19:64",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 14791,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "8378:7:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 14797,
                  "initialValue": {
                    "argumentTypes": null,
                    "condition": {
                      "argumentTypes": null,
                      "id": 14793,
                      "name": "pairOrdered",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14785,
                      "src": "8400:11:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseExpression": {
                      "argumentTypes": null,
                      "id": 14795,
                      "name": "quote",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14779,
                      "src": "8421:5:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 14796,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "Conditional",
                    "src": "8400:26:64",
                    "trueExpression": {
                      "argumentTypes": null,
                      "id": 14794,
                      "name": "base",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14777,
                      "src": "8414:4:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8378:48:64"
                },
                {
                  "assignments": [
                    14799
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 14799,
                      "name": "orderedQuote",
                      "nodeType": "VariableDeclaration",
                      "scope": 14814,
                      "src": "8436:20:64",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 14798,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "8436:7:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 14804,
                  "initialValue": {
                    "argumentTypes": null,
                    "condition": {
                      "argumentTypes": null,
                      "id": 14800,
                      "name": "pairOrdered",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14785,
                      "src": "8459:11:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseExpression": {
                      "argumentTypes": null,
                      "id": 14802,
                      "name": "base",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14777,
                      "src": "8481:4:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 14803,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "Conditional",
                    "src": "8459:26:64",
                    "trueExpression": {
                      "argumentTypes": null,
                      "id": 14801,
                      "name": "quote",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14779,
                      "src": "8473:5:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8436:49:64"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 14808,
                            "name": "orderedBase",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14792,
                            "src": "8530:11:64",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 14809,
                            "name": "orderedQuote",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14799,
                            "src": "8543:12:64",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 14806,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 15140,
                            "src": "8513:3:64",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 14807,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encodePacked",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "8513:16:64",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function () pure returns (bytes memory)"
                          }
                        },
                        "id": 14810,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "8513:43:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 14805,
                      "name": "keccak256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 15147,
                      "src": "8503:9:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_sha3_pure$__$returns$_t_bytes32_$",
                        "typeString": "function () pure returns (bytes32)"
                      }
                    },
                    "id": 14811,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8503:54:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 14783,
                  "id": 14812,
                  "nodeType": "Return",
                  "src": "8496:61:64"
                }
              ]
            },
            "documentation": "@dev Returns a unique id for each pair, regardless of the order of base and quote",
            "id": 14814,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "_pairId",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 14780,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14777,
                  "name": "base",
                  "nodeType": "VariableDeclaration",
                  "scope": 14814,
                  "src": "8251:12:64",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 14776,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8251:7:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 14779,
                  "name": "quote",
                  "nodeType": "VariableDeclaration",
                  "scope": 14814,
                  "src": "8265:13:64",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 14778,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8265:7:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8250:29:64"
            },
            "payable": false,
            "returnParameters": {
              "id": 14783,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14782,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 14814,
                  "src": "8303:7:64",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 14781,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "8303:7:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8302:9:64"
            },
            "scope": 14887,
            "src": "8234:330:64",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 14846,
              "nodeType": "Block",
              "src": "8735:179:64",
              "statements": [
                {
                  "assignments": [
                    14826
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 14826,
                      "name": "pairOrdered",
                      "nodeType": "VariableDeclaration",
                      "scope": 14847,
                      "src": "8745:16:64",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 14825,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "8745:4:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 14831,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 14828,
                        "name": "base",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14816,
                        "src": "8779:4:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 14829,
                        "name": "quote",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14818,
                        "src": "8785:5:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 14827,
                      "name": "_isPairOrdered",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14886,
                      "src": "8764:14:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_address_$_t_address_$returns$_t_bool_$",
                        "typeString": "function (address,address) pure returns (bool)"
                      }
                    },
                    "id": 14830,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8764:27:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8745:46:64"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "condition": {
                      "argumentTypes": null,
                      "id": 14832,
                      "name": "pairOrdered",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14826,
                      "src": "8809:11:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 14841,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 14837,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "id": 14835,
                                  "name": "ONE",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 14333,
                                  "src": "8838:3:64",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "**",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "hexValue": "32",
                                  "id": 14836,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "8843:1:64",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_2_by_1",
                                    "typeString": "int_const 2"
                                  },
                                  "value": "2"
                                },
                                "src": "8838:6:64",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "/",
                              "rightExpression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 14839,
                                    "name": "xrt",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 14820,
                                    "src": "8855:3:64",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint128",
                                      "typeString": "uint128"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint128",
                                      "typeString": "uint128"
                                    }
                                  ],
                                  "id": 14838,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "8847:7:64",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint256_$",
                                    "typeString": "type(uint256)"
                                  },
                                  "typeName": "uint256"
                                },
                                "id": 14840,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "8847:12:64",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "8838:21:64",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "id": 14842,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "8837:23:64",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 14834,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "8829:7:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_uint128_$",
                          "typeString": "type(uint128)"
                        },
                        "typeName": "uint128"
                      },
                      "id": 14843,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "8829:32:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint128",
                        "typeString": "uint128"
                      }
                    },
                    "id": 14844,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "Conditional",
                    "src": "8809:52:64",
                    "trueExpression": {
                      "argumentTypes": null,
                      "id": 14833,
                      "name": "xrt",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14820,
                      "src": "8823:3:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint128",
                        "typeString": "uint128"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint128",
                      "typeString": "uint128"
                    }
                  },
                  "functionReturnParameters": 14824,
                  "id": 14845,
                  "nodeType": "Return",
                  "src": "8802:59:64"
                }
              ]
            },
            "documentation": "@dev Compute xrt depending on base and quote order.",
            "id": 14847,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "_pairXRT",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 14821,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14816,
                  "name": "base",
                  "nodeType": "VariableDeclaration",
                  "scope": 14847,
                  "src": "8661:12:64",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 14815,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8661:7:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 14818,
                  "name": "quote",
                  "nodeType": "VariableDeclaration",
                  "scope": 14847,
                  "src": "8675:13:64",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 14817,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8675:7:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 14820,
                  "name": "xrt",
                  "nodeType": "VariableDeclaration",
                  "scope": 14847,
                  "src": "8690:11:64",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint128",
                    "typeString": "uint128"
                  },
                  "typeName": {
                    "id": 14819,
                    "name": "uint128",
                    "nodeType": "ElementaryTypeName",
                    "src": "8690:7:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint128",
                      "typeString": "uint128"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8660:42:64"
            },
            "payable": false,
            "returnParameters": {
              "id": 14824,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14823,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 14847,
                  "src": "8726:7:64",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint128",
                    "typeString": "uint128"
                  },
                  "typeName": {
                    "id": 14822,
                    "name": "uint128",
                    "nodeType": "ElementaryTypeName",
                    "src": "8726:7:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint128",
                      "typeString": "uint128"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8725:9:64"
            },
            "scope": 14887,
            "src": "8643:271:64",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 14871,
              "nodeType": "Block",
              "src": "9025:86:64",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 14863,
                            "name": "PPF_v1_ID",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14328,
                            "src": "9069:9:64",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 14864,
                            "name": "base",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14849,
                            "src": "9080:4:64",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 14865,
                            "name": "quote",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14851,
                            "src": "9086:5:64",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 14866,
                            "name": "xrt",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14853,
                            "src": "9093:3:64",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint128",
                              "typeString": "uint128"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 14867,
                            "name": "when",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14855,
                            "src": "9098:4:64",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_uint128",
                              "typeString": "uint128"
                            },
                            {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 14861,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 15140,
                            "src": "9052:3:64",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 14862,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encodePacked",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "9052:16:64",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function () pure returns (bytes memory)"
                          }
                        },
                        "id": 14868,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "9052:51:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 14860,
                      "name": "keccak256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 15147,
                      "src": "9042:9:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_sha3_pure$__$returns$_t_bytes32_$",
                        "typeString": "function () pure returns (bytes32)"
                      }
                    },
                    "id": 14869,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9042:62:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 14859,
                  "id": 14870,
                  "nodeType": "Return",
                  "src": "9035:69:64"
                }
              ]
            },
            "documentation": null,
            "id": 14872,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "_setHash",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 14856,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14849,
                  "name": "base",
                  "nodeType": "VariableDeclaration",
                  "scope": 14872,
                  "src": "8938:12:64",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 14848,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8938:7:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 14851,
                  "name": "quote",
                  "nodeType": "VariableDeclaration",
                  "scope": 14872,
                  "src": "8952:13:64",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 14850,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8952:7:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 14853,
                  "name": "xrt",
                  "nodeType": "VariableDeclaration",
                  "scope": 14872,
                  "src": "8967:11:64",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint128",
                    "typeString": "uint128"
                  },
                  "typeName": {
                    "id": 14852,
                    "name": "uint128",
                    "nodeType": "ElementaryTypeName",
                    "src": "8967:7:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint128",
                      "typeString": "uint128"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 14855,
                  "name": "when",
                  "nodeType": "VariableDeclaration",
                  "scope": 14872,
                  "src": "8980:11:64",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 14854,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "8980:6:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8937:55:64"
            },
            "payable": false,
            "returnParameters": {
              "id": 14859,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14858,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 14872,
                  "src": "9016:7:64",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 14857,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "9016:7:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9015:9:64"
            },
            "scope": 14887,
            "src": "8920:191:64",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 14885,
              "nodeType": "Block",
              "src": "9198:36:64",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 14883,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 14881,
                      "name": "base",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14874,
                      "src": "9215:4:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 14882,
                      "name": "quote",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14876,
                      "src": "9222:5:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "9215:12:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 14880,
                  "id": 14884,
                  "nodeType": "Return",
                  "src": "9208:19:64"
                }
              ]
            },
            "documentation": null,
            "id": 14886,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "_isPairOrdered",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 14877,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14874,
                  "name": "base",
                  "nodeType": "VariableDeclaration",
                  "scope": 14886,
                  "src": "9141:12:64",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 14873,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "9141:7:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 14876,
                  "name": "quote",
                  "nodeType": "VariableDeclaration",
                  "scope": 14886,
                  "src": "9155:13:64",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 14875,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "9155:7:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9140:29:64"
            },
            "payable": false,
            "returnParameters": {
              "id": 14880,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14879,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 14886,
                  "src": "9192:4:64",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 14878,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "9192:4:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9191:6:64"
            },
            "scope": 14887,
            "src": "9117:117:64",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "private"
          }
        ],
        "scope": 14888,
        "src": "144:9092:64"
      }
    ],
    "src": "0:9237:64"
  },
  "legacyAST": {
    "absolutePath": "@aragon/ppf-contracts/contracts/PPF.sol",
    "exportedSymbols": {
      "PPF": [
        14887
      ]
    },
    "id": 14888,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 14315,
        "literals": [
          "solidity",
          "0.4",
          ".24"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:64"
      },
      {
        "absolutePath": "@aragon/ppf-contracts/contracts/IFeed.sol",
        "file": "./IFeed.sol",
        "id": 14316,
        "nodeType": "ImportDirective",
        "scope": 14888,
        "sourceUnit": 14314,
        "src": "25:21:64",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@aragon/ppf-contracts/contracts/open-zeppelin/ECRecovery.sol",
        "file": "./open-zeppelin/ECRecovery.sol",
        "id": 14317,
        "nodeType": "ImportDirective",
        "scope": 14888,
        "sourceUnit": 14986,
        "src": "47:40:64",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@aragon/os/contracts/common/TimeHelpers.sol",
        "file": "@aragon/os/contracts/common/TimeHelpers.sol",
        "id": 14318,
        "nodeType": "ImportDirective",
        "scope": 14888,
        "sourceUnit": 11201,
        "src": "88:53:64",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 14319,
              "name": "IFeed",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 14313,
              "src": "160:5:64",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IFeed_$14313",
                "typeString": "contract IFeed"
              }
            },
            "id": 14320,
            "nodeType": "InheritanceSpecifier",
            "src": "160:5:64"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 14321,
              "name": "TimeHelpers",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 11200,
              "src": "167:11:64",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_TimeHelpers_$11200",
                "typeString": "contract TimeHelpers"
              }
            },
            "id": 14322,
            "nodeType": "InheritanceSpecifier",
            "src": "167:11:64"
          }
        ],
        "contractDependencies": [
          11200,
          14313
        ],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 14887,
        "linearizedBaseContracts": [
          14887,
          11200,
          14313
        ],
        "name": "PPF",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 14325,
            "libraryName": {
              "contractScope": null,
              "id": 14323,
              "name": "ECRecovery",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 14985,
              "src": "191:10:64",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ECRecovery_$14985",
                "typeString": "library ECRecovery"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "185:29:64",
            "typeName": {
              "id": 14324,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "206:7:64",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            }
          },
          {
            "constant": true,
            "id": 14328,
            "name": "PPF_v1_ID",
            "nodeType": "VariableDeclaration",
            "scope": 14887,
            "src": "220:102:64",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 14326,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "220:7:64",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "307833336138626137323032323330666131636565326161633762616333323239333965646337626130613438623039383933333561356638376135373730333639",
              "id": 14327,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "256:66:64",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_23366072383108825342417459513493892810738344165112321217906389262128385557353_by_1",
                "typeString": "int_const 2336...(69 digits omitted)...7353"
              },
              "value": "0x33a8ba7202230fa1cee2aac7bac322939edc7ba0a48b0989335a5f87a5770369"
            },
            "visibility": "public"
          },
          {
            "constant": true,
            "id": 14333,
            "name": "ONE",
            "nodeType": "VariableDeclaration",
            "scope": 14887,
            "src": "352:40:64",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 14329,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "352:7:64",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "argumentTypes": null,
              "commonType": {
                "typeIdentifier": "t_rational_1000000000000000000_by_1",
                "typeString": "int_const 1000000000000000000"
              },
              "id": 14332,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "lValueRequested": false,
              "leftExpression": {
                "argumentTypes": null,
                "hexValue": "3130",
                "id": 14330,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "kind": "number",
                "lValueRequested": false,
                "nodeType": "Literal",
                "src": "384:2:64",
                "subdenomination": null,
                "typeDescriptions": {
                  "typeIdentifier": "t_rational_10_by_1",
                  "typeString": "int_const 10"
                },
                "value": "10"
              },
              "nodeType": "BinaryOperation",
              "operator": "**",
              "rightExpression": {
                "argumentTypes": null,
                "hexValue": "3138",
                "id": 14331,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "kind": "number",
                "lValueRequested": false,
                "nodeType": "Literal",
                "src": "390:2:64",
                "subdenomination": null,
                "typeDescriptions": {
                  "typeIdentifier": "t_rational_18_by_1",
                  "typeString": "int_const 18"
                },
                "value": "18"
              },
              "src": "384:8:64",
              "typeDescriptions": {
                "typeIdentifier": "t_rational_1000000000000000000_by_1",
                "typeString": "int_const 1000000000000000000"
              }
            },
            "visibility": "internal"
          },
          {
            "constant": true,
            "id": 14336,
            "name": "ERROR_BAD_SIGNATURE",
            "nodeType": "VariableDeclaration",
            "scope": 14887,
            "src": "476:65:64",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 14334,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "476:6:64",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "5050465f4241445f5349474e4154555245",
              "id": 14335,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "522:19:64",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_7b0b7328ad48c7b774318abef5c8d86396430851fed527b9a87750455861ccee",
                "typeString": "literal_string \"PPF_BAD_SIGNATURE\""
              },
              "value": "PPF_BAD_SIGNATURE"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 14339,
            "name": "ERROR_BAD_RATE_TIMESTAMP",
            "nodeType": "VariableDeclaration",
            "scope": 14887,
            "src": "547:75:64",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 14337,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "547:6:64",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "5050465f4241445f524154455f54494d455354414d50",
              "id": 14338,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "598:24:64",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_2758805d1f6a36dfce0f9419493d8e693b0ba6eec71ac32432b85095c56cde9a",
                "typeString": "literal_string \"PPF_BAD_RATE_TIMESTAMP\""
              },
              "value": "PPF_BAD_RATE_TIMESTAMP"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 14342,
            "name": "ERROR_INVALID_RATE_VALUE",
            "nodeType": "VariableDeclaration",
            "scope": 14887,
            "src": "628:75:64",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 14340,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "628:6:64",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "5050465f494e56414c49445f524154455f56414c5545",
              "id": 14341,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "679:24:64",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_10586e50f7aab22f74c122471da01c525e7332f0941890f5261ae95d686b7d2c",
                "typeString": "literal_string \"PPF_INVALID_RATE_VALUE\""
              },
              "value": "PPF_INVALID_RATE_VALUE"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 14345,
            "name": "ERROR_EQUAL_BASE_QUOTE_ADDRESSES",
            "nodeType": "VariableDeclaration",
            "scope": 14887,
            "src": "709:91:64",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 14343,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "709:6:64",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "5050465f455155414c5f424153455f51554f54455f414444524553534553",
              "id": 14344,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "768:32:64",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_23a28b68aa6bb31c92260c270ffc7f831c77a686656f925c41974304d0ff6e05",
                "typeString": "literal_string \"PPF_EQUAL_BASE_QUOTE_ADDRESSES\""
              },
              "value": "PPF_EQUAL_BASE_QUOTE_ADDRESSES"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 14348,
            "name": "ERROR_BASE_ADDRESSES_LENGTH_ZERO",
            "nodeType": "VariableDeclaration",
            "scope": 14887,
            "src": "806:88:64",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 14346,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "806:6:64",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "5050465f424153455f4144445245535345535f4c454e5f5a45524f",
              "id": 14347,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "865:29:64",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_cee7f0ac9ef2ce23b0657250328cf277540de4bcd0cf7a753b2f0036a7f3f1fe",
                "typeString": "literal_string \"PPF_BASE_ADDRESSES_LEN_ZERO\""
              },
              "value": "PPF_BASE_ADDRESSES_LEN_ZERO"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 14351,
            "name": "ERROR_QUOTE_ADDRESSES_LENGTH_MISMATCH",
            "nodeType": "VariableDeclaration",
            "scope": 14887,
            "src": "900:98:64",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 14349,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "900:6:64",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "5050465f51554f54455f4144445245535345535f4c454e5f4d49534d41544348",
              "id": 14350,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "964:34:64",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_c8a9988f898e88e5437004b35d2c2bfbe98475c914213db03f2ba51fc8a24872",
                "typeString": "literal_string \"PPF_QUOTE_ADDRESSES_LEN_MISMATCH\""
              },
              "value": "PPF_QUOTE_ADDRESSES_LEN_MISMATCH"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 14354,
            "name": "ERROR_RATE_VALUES_LENGTH_MISMATCH",
            "nodeType": "VariableDeclaration",
            "scope": 14887,
            "src": "1004:90:64",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 14352,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "1004:6:64",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "5050465f524154455f56414c5545535f4c454e5f4d49534d41544348",
              "id": 14353,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1064:30:64",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_630bc233bc5591ff487c414585a6e1e16c138a8f636e4440f99fd7496aeea322",
                "typeString": "literal_string \"PPF_RATE_VALUES_LEN_MISMATCH\""
              },
              "value": "PPF_RATE_VALUES_LEN_MISMATCH"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 14357,
            "name": "ERROR_RATE_TIMESTAMPS_LENGTH_MISMATCH",
            "nodeType": "VariableDeclaration",
            "scope": 14887,
            "src": "1100:98:64",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 14355,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "1100:6:64",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "5050465f524154455f54494d455354414d50535f4c454e5f4d49534d41544348",
              "id": 14356,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1164:34:64",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_91eb6e0c8a3ec39f328182aeafd093e1b2ddf60fbbe78c4d435a19f97fdaca16",
                "typeString": "literal_string \"PPF_RATE_TIMESTAMPS_LEN_MISMATCH\""
              },
              "value": "PPF_RATE_TIMESTAMPS_LEN_MISMATCH"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 14360,
            "name": "ERROR_SIGNATURES_LENGTH_MISMATCH",
            "nodeType": "VariableDeclaration",
            "scope": 14887,
            "src": "1204:88:64",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 14358,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "1204:6:64",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "5050465f5349474e4154555245535f4c454e5f4d49534d41544348",
              "id": 14359,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1263:29:64",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_58fb34409fba308be7383d8069d0567c95c3a9f5c872446c0c608eeb7da2e719",
                "typeString": "literal_string \"PPF_SIGNATURES_LEN_MISMATCH\""
              },
              "value": "PPF_SIGNATURES_LEN_MISMATCH"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 14363,
            "name": "ERROR_CAN_NOT_SET_OPERATOR",
            "nodeType": "VariableDeclaration",
            "scope": 14887,
            "src": "1298:79:64",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 14361,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "1298:6:64",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "5050465f43414e5f4e4f545f5345545f4f50455241544f52",
              "id": 14362,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1351:26:64",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_00e5dd8790a8fb5ab61f36f5872cde3ddd22d7166c20c9af5bc5e412c9ac88ad",
                "typeString": "literal_string \"PPF_CAN_NOT_SET_OPERATOR\""
              },
              "value": "PPF_CAN_NOT_SET_OPERATOR"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 14366,
            "name": "ERROR_CAN_NOT_SET_OPERATOR_OWNER",
            "nodeType": "VariableDeclaration",
            "scope": 14887,
            "src": "1383:91:64",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 14364,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "1383:6:64",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "5050465f43414e5f4e4f545f5345545f4f50455241544f525f4f574e4552",
              "id": 14365,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1442:32:64",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_55299722daa070e827d92283d8bcbf1458260b7351d8df1cdf3ed75e54a20498",
                "typeString": "literal_string \"PPF_CAN_NOT_SET_OPERATOR_OWNER\""
              },
              "value": "PPF_CAN_NOT_SET_OPERATOR_OWNER"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 14369,
            "name": "ERROR_OPERATOR_ADDRESS_ZERO",
            "nodeType": "VariableDeclaration",
            "scope": 14887,
            "src": "1480:81:64",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 14367,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "1480:6:64",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "5050465f4f50455241544f525f414444524553535f5a45524f",
              "id": 14368,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1534:27:64",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_7dcceccf3733df11c1133065fbf959f756028f21772ec24577c8c3acda01fdd4",
                "typeString": "literal_string \"PPF_OPERATOR_ADDRESS_ZERO\""
              },
              "value": "PPF_OPERATOR_ADDRESS_ZERO"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 14372,
            "name": "ERROR_OPERATOR_OWNER_ADDRESS_ZERO",
            "nodeType": "VariableDeclaration",
            "scope": 14887,
            "src": "1567:93:64",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 14370,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "1567:6:64",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "5050465f4f50455241544f525f4f574e45525f414444524553535f5a45524f",
              "id": 14371,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1627:33:64",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_4976a274da686140a05a897ab45a9399d28a6ba8aa07b366c75a13149a4cff24",
                "typeString": "literal_string \"PPF_OPERATOR_OWNER_ADDRESS_ZERO\""
              },
              "value": "PPF_OPERATOR_OWNER_ADDRESS_ZERO"
            },
            "visibility": "private"
          },
          {
            "canonicalName": "PPF.Price",
            "id": 14377,
            "members": [
              {
                "constant": false,
                "id": 14374,
                "name": "xrt",
                "nodeType": "VariableDeclaration",
                "scope": 14377,
                "src": "1690:11:64",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint128",
                  "typeString": "uint128"
                },
                "typeName": {
                  "id": 14373,
                  "name": "uint128",
                  "nodeType": "ElementaryTypeName",
                  "src": "1690:7:64",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint128",
                    "typeString": "uint128"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 14376,
                "name": "when",
                "nodeType": "VariableDeclaration",
                "scope": 14377,
                "src": "1711:11:64",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint64",
                  "typeString": "uint64"
                },
                "typeName": {
                  "id": 14375,
                  "name": "uint64",
                  "nodeType": "ElementaryTypeName",
                  "src": "1711:6:64",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "Price",
            "nodeType": "StructDefinition",
            "scope": 14887,
            "src": "1667:62:64",
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 14379,
            "name": "operator",
            "nodeType": "VariableDeclaration",
            "scope": 14887,
            "src": "1735:23:64",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 14378,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "1735:7:64",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 14381,
            "name": "operatorOwner",
            "nodeType": "VariableDeclaration",
            "scope": 14887,
            "src": "1764:28:64",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 14380,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "1764:7:64",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 14385,
            "name": "feed",
            "nodeType": "VariableDeclaration",
            "scope": 14887,
            "src": "1798:40:64",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Price_$14377_storage_$",
              "typeString": "mapping(bytes32 => struct PPF.Price)"
            },
            "typeName": {
              "id": 14384,
              "keyType": {
                "id": 14382,
                "name": "bytes32",
                "nodeType": "ElementaryTypeName",
                "src": "1807:7:64",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                }
              },
              "nodeType": "Mapping",
              "src": "1798:26:64",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Price_$14377_storage_$",
                "typeString": "mapping(bytes32 => struct PPF.Price)"
              },
              "valueType": {
                "contractScope": null,
                "id": 14383,
                "name": "Price",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 14377,
                "src": "1818:5:64",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_Price_$14377_storage_ptr",
                  "typeString": "struct PPF.Price"
                }
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 14395,
            "name": "SetRate",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 14394,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14387,
                  "indexed": true,
                  "name": "base",
                  "nodeType": "VariableDeclaration",
                  "scope": 14395,
                  "src": "1859:20:64",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 14386,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1859:7:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 14389,
                  "indexed": true,
                  "name": "quote",
                  "nodeType": "VariableDeclaration",
                  "scope": 14395,
                  "src": "1881:21:64",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 14388,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1881:7:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 14391,
                  "indexed": false,
                  "name": "xrt",
                  "nodeType": "VariableDeclaration",
                  "scope": 14395,
                  "src": "1904:11:64",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 14390,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1904:7:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 14393,
                  "indexed": false,
                  "name": "when",
                  "nodeType": "VariableDeclaration",
                  "scope": 14395,
                  "src": "1917:11:64",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 14392,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "1917:6:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1858:71:64"
            },
            "src": "1845:85:64"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 14399,
            "name": "SetOperator",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 14398,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14397,
                  "indexed": true,
                  "name": "operator",
                  "nodeType": "VariableDeclaration",
                  "scope": 14399,
                  "src": "1953:24:64",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 14396,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1953:7:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1952:26:64"
            },
            "src": "1935:44:64"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 14403,
            "name": "SetOperatorOwner",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 14402,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14401,
                  "indexed": true,
                  "name": "operatorOwner",
                  "nodeType": "VariableDeclaration",
                  "scope": 14403,
                  "src": "2007:29:64",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 14400,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2007:7:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2006:31:64"
            },
            "src": "1984:54:64"
          },
          {
            "body": {
              "id": 14418,
              "nodeType": "Block",
              "src": "2284:83:64",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 14411,
                        "name": "_operator",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14405,
                        "src": "2307:9:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 14410,
                      "name": "_setOperator",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14752,
                      "src": "2294:12:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 14412,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2294:23:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 14413,
                  "nodeType": "ExpressionStatement",
                  "src": "2294:23:64"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 14415,
                        "name": "_operatorOwner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14407,
                        "src": "2345:14:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 14414,
                      "name": "_setOperatorOwner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14775,
                      "src": "2327:17:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 14416,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2327:33:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 14417,
                  "nodeType": "ExpressionStatement",
                  "src": "2327:33:64"
                }
              ]
            },
            "documentation": "@param _operator Public key allowed to sign messages to update the pricefeed\n@param _operatorOwner Address of an account that can change the operator",
            "id": 14419,
            "implemented": true,
            "isConstructor": true,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 14408,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14405,
                  "name": "_operator",
                  "nodeType": "VariableDeclaration",
                  "scope": 14419,
                  "src": "2234:17:64",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 14404,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2234:7:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 14407,
                  "name": "_operatorOwner",
                  "nodeType": "VariableDeclaration",
                  "scope": 14419,
                  "src": "2253:22:64",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 14406,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2253:7:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2233:43:64"
            },
            "payable": false,
            "returnParameters": {
              "id": 14409,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2284:0:64"
            },
            "scope": 14887,
            "src": "2221:146:64",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 14441,
              "nodeType": "Block",
              "src": "2573:314:64",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 14433,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 14428,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 14425,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 15153,
                              "src": "2765:3:64",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 14426,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "2765:10:64",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 14427,
                            "name": "operator",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14379,
                            "src": "2779:8:64",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "2765:22:64",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "||",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 14432,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 14429,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 15153,
                              "src": "2791:3:64",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 14430,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "2791:10:64",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 14431,
                            "name": "operatorOwner",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14381,
                            "src": "2805:13:64",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "2791:27:64",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "2765:53:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 14434,
                        "name": "ERROR_CAN_NOT_SET_OPERATOR",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14363,
                        "src": "2820:26:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 14424,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        15156,
                        15157
                      ],
                      "referencedDeclaration": 15157,
                      "src": "2757:7:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 14435,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2757:90:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 14436,
                  "nodeType": "ExpressionStatement",
                  "src": "2757:90:64"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 14438,
                        "name": "_operator",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14421,
                        "src": "2870:9:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 14437,
                      "name": "_setOperator",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14752,
                      "src": "2857:12:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 14439,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2857:23:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 14440,
                  "nodeType": "ExpressionStatement",
                  "src": "2857:23:64"
                }
              ]
            },
            "documentation": "@notice Set operator public key to `_operator`\n@param _operator Public key allowed to sign messages to update the pricefeed",
            "id": 14442,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "setOperator",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 14422,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14421,
                  "name": "_operator",
                  "nodeType": "VariableDeclaration",
                  "scope": 14442,
                  "src": "2545:17:64",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 14420,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2545:7:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2544:19:64"
            },
            "payable": false,
            "returnParameters": {
              "id": 14423,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2573:0:64"
            },
            "scope": 14887,
            "src": "2524:363:64",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 14459,
              "nodeType": "Block",
              "src": "3099:130:64",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 14451,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 14448,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 15153,
                            "src": "3117:3:64",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 14449,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "3117:10:64",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 14450,
                          "name": "operatorOwner",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 14381,
                          "src": "3131:13:64",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "3117:27:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 14452,
                        "name": "ERROR_CAN_NOT_SET_OPERATOR_OWNER",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14366,
                        "src": "3146:32:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 14447,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        15156,
                        15157
                      ],
                      "referencedDeclaration": 15157,
                      "src": "3109:7:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 14453,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3109:70:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 14454,
                  "nodeType": "ExpressionStatement",
                  "src": "3109:70:64"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 14456,
                        "name": "_operatorOwner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14444,
                        "src": "3207:14:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 14455,
                      "name": "_setOperatorOwner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14775,
                      "src": "3189:17:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 14457,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3189:33:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 14458,
                  "nodeType": "ExpressionStatement",
                  "src": "3189:33:64"
                }
              ]
            },
            "documentation": "@notice Set operator owner to `_operatorOwner`\n@param _operatorOwner Address of an account that can change the operator",
            "id": 14460,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "setOperatorOwner",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 14445,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14444,
                  "name": "_operatorOwner",
                  "nodeType": "VariableDeclaration",
                  "scope": 14460,
                  "src": "3066:22:64",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 14443,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3066:7:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3065:24:64"
            },
            "payable": false,
            "returnParameters": {
              "id": 14446,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3099:0:64"
            },
            "scope": 14887,
            "src": "3040:189:64",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 14512,
              "nodeType": "Block",
              "src": "3534:326:64",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 14473,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 14471,
                      "name": "base",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14462,
                      "src": "3548:4:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 14472,
                      "name": "quote",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14464,
                      "src": "3556:5:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "3548:13:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 14482,
                  "nodeType": "IfStatement",
                  "src": "3544:83:64",
                  "trueBody": {
                    "id": 14481,
                    "nodeType": "Block",
                    "src": "3563:64:64",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 14475,
                                  "name": "ONE",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 14333,
                                  "src": "3593:3:64",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 14474,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "3585:7:64",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_uint128_$",
                                  "typeString": "type(uint128)"
                                },
                                "typeName": "uint128"
                              },
                              "id": 14476,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3585:12:64",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint128",
                                "typeString": "uint128"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "id": 14477,
                                "name": "getTimestamp64",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 11199,
                                "src": "3599:14:64",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$__$returns$_t_uint64_$",
                                  "typeString": "function () view returns (uint64)"
                                }
                              },
                              "id": 14478,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3599:16:64",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint64",
                                "typeString": "uint64"
                              }
                            }
                          ],
                          "id": 14479,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "3584:32:64",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_uint128_$_t_uint64_$",
                            "typeString": "tuple(uint128,uint64)"
                          }
                        },
                        "functionReturnParameters": 14470,
                        "id": 14480,
                        "nodeType": "Return",
                        "src": "3577:39:64"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    14484
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 14484,
                      "name": "price",
                      "nodeType": "VariableDeclaration",
                      "scope": 14513,
                      "src": "3637:19:64",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Price_$14377_storage_ptr",
                        "typeString": "struct PPF.Price"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 14483,
                        "name": "Price",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 14377,
                        "src": "3637:5:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Price_$14377_storage_ptr",
                          "typeString": "struct PPF.Price"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 14491,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 14485,
                      "name": "feed",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14385,
                      "src": "3659:4:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Price_$14377_storage_$",
                        "typeString": "mapping(bytes32 => struct PPF.Price storage ref)"
                      }
                    },
                    "id": 14490,
                    "indexExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 14487,
                          "name": "base",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 14462,
                          "src": "3672:4:64",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 14488,
                          "name": "quote",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 14464,
                          "src": "3678:5:64",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 14486,
                        "name": "_pairId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14814,
                        "src": "3664:7:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_address_$_t_address_$returns$_t_bytes32_$",
                          "typeString": "function (address,address) pure returns (bytes32)"
                        }
                      },
                      "id": 14489,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "3664:20:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "3659:26:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Price_$14377_storage",
                      "typeString": "struct PPF.Price storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3637:48:64"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    },
                    "id": 14495,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 14492,
                        "name": "price",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14484,
                        "src": "3735:5:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Price_$14377_storage_ptr",
                          "typeString": "struct PPF.Price storage pointer"
                        }
                      },
                      "id": 14493,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "when",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 14376,
                      "src": "3735:10:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 14494,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3749:1:64",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "3735:15:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 14501,
                  "nodeType": "IfStatement",
                  "src": "3731:59:64",
                  "trueBody": {
                    "id": 14500,
                    "nodeType": "Block",
                    "src": "3752:38:64",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 14496,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3774:1:64",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 14497,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3777:1:64",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "id": 14498,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "3773:6:64",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_rational_0_by_1_$_t_rational_0_by_1_$",
                            "typeString": "tuple(int_const 0,int_const 0)"
                          }
                        },
                        "functionReturnParameters": 14470,
                        "id": 14499,
                        "nodeType": "Return",
                        "src": "3766:13:64"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "components": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 14503,
                            "name": "base",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14462,
                            "src": "3817:4:64",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 14504,
                            "name": "quote",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14464,
                            "src": "3823:5:64",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 14505,
                              "name": "price",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 14484,
                              "src": "3830:5:64",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Price_$14377_storage_ptr",
                                "typeString": "struct PPF.Price storage pointer"
                              }
                            },
                            "id": 14506,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "xrt",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 14374,
                            "src": "3830:9:64",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint128",
                              "typeString": "uint128"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_uint128",
                              "typeString": "uint128"
                            }
                          ],
                          "id": 14502,
                          "name": "_pairXRT",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 14847,
                          "src": "3808:8:64",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_address_$_t_address_$_t_uint128_$returns$_t_uint128_$",
                            "typeString": "function (address,address,uint128) pure returns (uint128)"
                          }
                        },
                        "id": 14507,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3808:32:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 14508,
                          "name": "price",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 14484,
                          "src": "3842:5:64",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Price_$14377_storage_ptr",
                            "typeString": "struct PPF.Price storage pointer"
                          }
                        },
                        "id": 14509,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "when",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 14376,
                        "src": "3842:10:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      }
                    ],
                    "id": 14510,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "3807:46:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint128_$_t_uint64_$",
                      "typeString": "tuple(uint128,uint64)"
                    }
                  },
                  "functionReturnParameters": 14470,
                  "id": 14511,
                  "nodeType": "Return",
                  "src": "3800:53:64"
                }
              ]
            },
            "documentation": "@param base Address for the base token in the feed\n@param quote Address for the quote token the base is denominated in\n@return XRT for base:quote and the timestamp when it was updated",
            "id": 14513,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "get",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 14465,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14462,
                  "name": "base",
                  "nodeType": "VariableDeclaration",
                  "scope": 14513,
                  "src": "3465:12:64",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 14461,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3465:7:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 14464,
                  "name": "quote",
                  "nodeType": "VariableDeclaration",
                  "scope": 14513,
                  "src": "3479:13:64",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 14463,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3479:7:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3464:29:64"
            },
            "payable": false,
            "returnParameters": {
              "id": 14470,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14467,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 14513,
                  "src": "3517:7:64",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint128",
                    "typeString": "uint128"
                  },
                  "typeName": {
                    "id": 14466,
                    "name": "uint128",
                    "nodeType": "ElementaryTypeName",
                    "src": "3517:7:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint128",
                      "typeString": "uint128"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 14469,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 14513,
                  "src": "3526:6:64",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 14468,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "3526:6:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3516:17:64"
            },
            "scope": 14887,
            "src": "3452:408:64",
            "stateMutability": "view",
            "superFunction": 14312,
            "visibility": "external"
          },
          {
            "body": {
              "id": 14520,
              "nodeType": "Block",
              "src": "4008:27:64",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 14518,
                    "name": "ONE",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 14333,
                    "src": "4025:3:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 14517,
                  "id": 14519,
                  "nodeType": "Return",
                  "src": "4018:10:64"
                }
              ]
            },
            "documentation": "@return The minimum rate precision used for the exchange rates",
            "id": 14521,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "ratePrecision",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 14514,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3973:2:64"
            },
            "payable": false,
            "returnParameters": {
              "id": 14517,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14516,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 14521,
                  "src": "3999:7:64",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 14515,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3999:7:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3998:9:64"
            },
            "scope": 14887,
            "src": "3951:84:64",
            "stateMutability": "pure",
            "superFunction": 14301,
            "visibility": "external"
          },
          {
            "body": {
              "id": 14609,
              "nodeType": "Block",
              "src": "4845:816:64",
              "statements": [
                {
                  "assignments": [
                    14535
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 14535,
                      "name": "pair",
                      "nodeType": "VariableDeclaration",
                      "scope": 14610,
                      "src": "4855:12:64",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 14534,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "4855:7:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 14540,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 14537,
                        "name": "base",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14523,
                        "src": "4878:4:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 14538,
                        "name": "quote",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14525,
                        "src": "4884:5:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 14536,
                      "name": "_pairId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14814,
                      "src": "4870:7:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_address_$_t_address_$returns$_t_bytes32_$",
                        "typeString": "function (address,address) pure returns (bytes32)"
                      }
                    },
                    "id": 14539,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4870:20:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4855:35:64"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 14552,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          },
                          "id": 14547,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 14542,
                            "name": "when",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14529,
                            "src": "5015:4:64",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 14543,
                                "name": "feed",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 14385,
                                "src": "5022:4:64",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Price_$14377_storage_$",
                                  "typeString": "mapping(bytes32 => struct PPF.Price storage ref)"
                                }
                              },
                              "id": 14545,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 14544,
                                "name": "pair",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 14535,
                                "src": "5027:4:64",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "5022:10:64",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Price_$14377_storage",
                                "typeString": "struct PPF.Price storage ref"
                              }
                            },
                            "id": 14546,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "when",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 14376,
                            "src": "5022:15:64",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          },
                          "src": "5015:22:64",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 14551,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 14548,
                            "name": "when",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14529,
                            "src": "5041:4:64",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 14549,
                              "name": "getTimestamp",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 11188,
                              "src": "5049:12:64",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                                "typeString": "function () view returns (uint256)"
                              }
                            },
                            "id": 14550,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "5049:14:64",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "5041:22:64",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "5015:48:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 14553,
                        "name": "ERROR_BAD_RATE_TIMESTAMP",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14339,
                        "src": "5065:24:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 14541,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        15156,
                        15157
                      ],
                      "referencedDeclaration": 15157,
                      "src": "5007:7:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 14554,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5007:83:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 14555,
                  "nodeType": "ExpressionStatement",
                  "src": "5007:83:64"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        },
                        "id": 14559,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 14557,
                          "name": "xrt",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 14527,
                          "src": "5108:3:64",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 14558,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "5114:1:64",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "5108:7:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 14560,
                        "name": "ERROR_INVALID_RATE_VALUE",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14342,
                        "src": "5117:24:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 14556,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        15156,
                        15157
                      ],
                      "referencedDeclaration": 15157,
                      "src": "5100:7:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 14561,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5100:42:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 14562,
                  "nodeType": "ExpressionStatement",
                  "src": "5100:42:64"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 14566,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 14564,
                          "name": "base",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 14523,
                          "src": "5242:4:64",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 14565,
                          "name": "quote",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 14525,
                          "src": "5250:5:64",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "5242:13:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 14567,
                        "name": "ERROR_EQUAL_BASE_QUOTE_ADDRESSES",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14345,
                        "src": "5257:32:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 14563,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        15156,
                        15157
                      ],
                      "referencedDeclaration": 15157,
                      "src": "5234:7:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 14568,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5234:56:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 14569,
                  "nodeType": "ExpressionStatement",
                  "src": "5234:56:64"
                },
                {
                  "assignments": [
                    14571
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 14571,
                      "name": "h",
                      "nodeType": "VariableDeclaration",
                      "scope": 14610,
                      "src": "5375:9:64",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 14570,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "5375:7:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 14578,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 14573,
                        "name": "base",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14523,
                        "src": "5396:4:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 14574,
                        "name": "quote",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14525,
                        "src": "5402:5:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 14575,
                        "name": "xrt",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14527,
                        "src": "5409:3:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 14576,
                        "name": "when",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14529,
                        "src": "5414:4:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        },
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      ],
                      "id": 14572,
                      "name": "_setHash",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14872,
                      "src": "5387:8:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_address_$_t_address_$_t_uint128_$_t_uint64_$returns$_t_bytes32_$",
                        "typeString": "function (address,address,uint128,uint64) pure returns (bytes32)"
                      }
                    },
                    "id": 14577,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5387:32:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5375:44:64"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 14585,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 14582,
                              "name": "sig",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 14531,
                              "src": "5455:3:64",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 14580,
                              "name": "h",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 14571,
                              "src": "5437:1:64",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "id": 14581,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "personalRecover",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 14906,
                            "src": "5437:17:64",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_address_$bound_to$_t_bytes32_$",
                              "typeString": "function (bytes32,bytes memory) pure returns (address)"
                            }
                          },
                          "id": 14583,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5437:22:64",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 14584,
                          "name": "operator",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 14379,
                          "src": "5463:8:64",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "5437:34:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 14586,
                        "name": "ERROR_BAD_SIGNATURE",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14336,
                        "src": "5473:19:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 14579,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        15156,
                        15157
                      ],
                      "referencedDeclaration": 15157,
                      "src": "5429:7:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 14587,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5429:64:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 14588,
                  "nodeType": "ExpressionStatement",
                  "src": "5429:64:64"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 14600,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 14589,
                        "name": "feed",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14385,
                        "src": "5555:4:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Price_$14377_storage_$",
                          "typeString": "mapping(bytes32 => struct PPF.Price storage ref)"
                        }
                      },
                      "id": 14591,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 14590,
                        "name": "pair",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14535,
                        "src": "5560:4:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "5555:10:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Price_$14377_storage",
                        "typeString": "struct PPF.Price storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 14594,
                              "name": "base",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 14523,
                              "src": "5583:4:64",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 14595,
                              "name": "quote",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 14525,
                              "src": "5589:5:64",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 14596,
                              "name": "xrt",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 14527,
                              "src": "5596:3:64",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint128",
                                "typeString": "uint128"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint128",
                                "typeString": "uint128"
                              }
                            ],
                            "id": 14593,
                            "name": "_pairXRT",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14847,
                            "src": "5574:8:64",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_address_$_t_address_$_t_uint128_$returns$_t_uint128_$",
                              "typeString": "function (address,address,uint128) pure returns (uint128)"
                            }
                          },
                          "id": 14597,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5574:26:64",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 14598,
                          "name": "when",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 14529,
                          "src": "5602:4:64",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          },
                          {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        ],
                        "id": 14592,
                        "name": "Price",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14377,
                        "src": "5568:5:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_struct$_Price_$14377_storage_ptr_$",
                          "typeString": "type(struct PPF.Price storage pointer)"
                        }
                      },
                      "id": 14599,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "structConstructorCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "5568:39:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Price_$14377_memory",
                        "typeString": "struct PPF.Price memory"
                      }
                    },
                    "src": "5555:52:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Price_$14377_storage",
                      "typeString": "struct PPF.Price storage ref"
                    }
                  },
                  "id": 14601,
                  "nodeType": "ExpressionStatement",
                  "src": "5555:52:64"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 14603,
                        "name": "base",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14523,
                        "src": "5631:4:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 14604,
                        "name": "quote",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14525,
                        "src": "5637:5:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 14605,
                        "name": "xrt",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14527,
                        "src": "5644:3:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 14606,
                        "name": "when",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14529,
                        "src": "5649:4:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        },
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      ],
                      "id": 14602,
                      "name": "SetRate",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14395,
                      "src": "5623:7:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint64_$returns$__$",
                        "typeString": "function (address,address,uint256,uint64)"
                      }
                    },
                    "id": 14607,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5623:31:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 14608,
                  "nodeType": "EmitStatement",
                  "src": "5618:36:64"
                }
              ]
            },
            "documentation": "@notice Update the price for the `base + ':' + quote` feed with an exchange rate of `xrt / ONE` for time `when`\n@dev If the number representation of base is lower than the one for quote, and update is cheaper, as less manipulation is required.\n@param base Address for the base token in the feed\n@param quote Address for the quote token the base is denominated in\n@param xrt Exchange rate for base denominated in quote. 10^18 is considered 1 to allow for decimal calculations\n@param when Timestamp for the exchange rate value\n@param sig Signature payload (EIP191) from operator, concatenated [  r  ][  s  ][v]. See _setHash function for the hash calculation.",
            "id": 14610,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "update",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 14532,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14523,
                  "name": "base",
                  "nodeType": "VariableDeclaration",
                  "scope": 14610,
                  "src": "4772:12:64",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 14522,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4772:7:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 14525,
                  "name": "quote",
                  "nodeType": "VariableDeclaration",
                  "scope": 14610,
                  "src": "4786:13:64",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 14524,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4786:7:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 14527,
                  "name": "xrt",
                  "nodeType": "VariableDeclaration",
                  "scope": 14610,
                  "src": "4801:11:64",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint128",
                    "typeString": "uint128"
                  },
                  "typeName": {
                    "id": 14526,
                    "name": "uint128",
                    "nodeType": "ElementaryTypeName",
                    "src": "4801:7:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint128",
                      "typeString": "uint128"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 14529,
                  "name": "when",
                  "nodeType": "VariableDeclaration",
                  "scope": 14610,
                  "src": "4814:11:64",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 14528,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "4814:6:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 14531,
                  "name": "sig",
                  "nodeType": "VariableDeclaration",
                  "scope": 14610,
                  "src": "4827:9:64",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 14530,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "4827:5:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4771:66:64"
            },
            "payable": false,
            "returnParameters": {
              "id": 14533,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4845:0:64"
            },
            "scope": 14887,
            "src": "4756:905:64",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 14728,
              "nodeType": "Block",
              "src": "6418:1264:64",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 14631,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 14628,
                            "name": "bases",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14613,
                            "src": "6436:5:64",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                              "typeString": "address[] memory"
                            }
                          },
                          "id": 14629,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "6436:12:64",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 14630,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "6452:1:64",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "6436:17:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 14632,
                        "name": "ERROR_BASE_ADDRESSES_LENGTH_ZERO",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14348,
                        "src": "6455:32:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 14627,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        15156,
                        15157
                      ],
                      "referencedDeclaration": 15157,
                      "src": "6428:7:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 14633,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6428:60:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 14634,
                  "nodeType": "ExpressionStatement",
                  "src": "6428:60:64"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 14640,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 14636,
                            "name": "bases",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14613,
                            "src": "6506:5:64",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                              "typeString": "address[] memory"
                            }
                          },
                          "id": 14637,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "6506:12:64",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 14638,
                            "name": "quotes",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14616,
                            "src": "6522:6:64",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                              "typeString": "address[] memory"
                            }
                          },
                          "id": 14639,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "6522:13:64",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "6506:29:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 14641,
                        "name": "ERROR_QUOTE_ADDRESSES_LENGTH_MISMATCH",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14351,
                        "src": "6537:37:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 14635,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        15156,
                        15157
                      ],
                      "referencedDeclaration": 15157,
                      "src": "6498:7:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 14642,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6498:77:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 14643,
                  "nodeType": "ExpressionStatement",
                  "src": "6498:77:64"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 14649,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 14645,
                            "name": "bases",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14613,
                            "src": "6593:5:64",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                              "typeString": "address[] memory"
                            }
                          },
                          "id": 14646,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "6593:12:64",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 14647,
                            "name": "xrts",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14619,
                            "src": "6609:4:64",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint128_$dyn_memory_ptr",
                              "typeString": "uint128[] memory"
                            }
                          },
                          "id": 14648,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "6609:11:64",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "6593:27:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 14650,
                        "name": "ERROR_RATE_VALUES_LENGTH_MISMATCH",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14354,
                        "src": "6622:33:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 14644,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        15156,
                        15157
                      ],
                      "referencedDeclaration": 15157,
                      "src": "6585:7:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 14651,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6585:71:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 14652,
                  "nodeType": "ExpressionStatement",
                  "src": "6585:71:64"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 14658,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 14654,
                            "name": "bases",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14613,
                            "src": "6674:5:64",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                              "typeString": "address[] memory"
                            }
                          },
                          "id": 14655,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "6674:12:64",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 14656,
                            "name": "whens",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14622,
                            "src": "6690:5:64",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint64_$dyn_memory_ptr",
                              "typeString": "uint64[] memory"
                            }
                          },
                          "id": 14657,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "6690:12:64",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "6674:28:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 14659,
                        "name": "ERROR_RATE_TIMESTAMPS_LENGTH_MISMATCH",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14357,
                        "src": "6704:37:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 14653,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        15156,
                        15157
                      ],
                      "referencedDeclaration": 15157,
                      "src": "6666:7:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 14660,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6666:76:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 14661,
                  "nodeType": "ExpressionStatement",
                  "src": "6666:76:64"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 14669,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 14663,
                            "name": "bases",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14613,
                            "src": "6760:5:64",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                              "typeString": "address[] memory"
                            }
                          },
                          "id": 14664,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "6760:12:64",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 14668,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 14665,
                              "name": "sigs",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 14624,
                              "src": "6776:4:64",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            "id": 14666,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "6776:11:64",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "/",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "3635",
                            "id": 14667,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "6790:2:64",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_65_by_1",
                              "typeString": "int_const 65"
                            },
                            "value": "65"
                          },
                          "src": "6776:16:64",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "6760:32:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 14670,
                        "name": "ERROR_SIGNATURES_LENGTH_MISMATCH",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14360,
                        "src": "6794:32:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 14662,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        15156,
                        15157
                      ],
                      "referencedDeclaration": 15157,
                      "src": "6752:7:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 14671,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6752:75:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 14672,
                  "nodeType": "ExpressionStatement",
                  "src": "6752:75:64"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 14679,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 14677,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 14674,
                              "name": "sigs",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 14624,
                              "src": "6845:4:64",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            "id": 14675,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "6845:11:64",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "%",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "3635",
                            "id": 14676,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "6859:2:64",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_65_by_1",
                              "typeString": "int_const 65"
                            },
                            "value": "65"
                          },
                          "src": "6845:16:64",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 14678,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "6865:1:64",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "6845:21:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 14680,
                        "name": "ERROR_SIGNATURES_LENGTH_MISMATCH",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14360,
                        "src": "6868:32:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 14673,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        15156,
                        15157
                      ],
                      "referencedDeclaration": 15157,
                      "src": "6837:7:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 14681,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6837:64:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 14682,
                  "nodeType": "ExpressionStatement",
                  "src": "6837:64:64"
                },
                {
                  "body": {
                    "id": 14726,
                    "nodeType": "Block",
                    "src": "6955:721:64",
                    "statements": [
                      {
                        "assignments": [
                          14695
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 14695,
                            "name": "sig",
                            "nodeType": "VariableDeclaration",
                            "scope": 14729,
                            "src": "7048:16:64",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes"
                            },
                            "typeName": {
                              "id": 14694,
                              "name": "bytes",
                              "nodeType": "ElementaryTypeName",
                              "src": "7048:5:64",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_storage_ptr",
                                "typeString": "bytes"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 14700,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "3635",
                              "id": 14698,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "7077:2:64",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_65_by_1",
                                "typeString": "int_const 65"
                              },
                              "value": "65"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_65_by_1",
                                "typeString": "int_const 65"
                              }
                            ],
                            "id": 14697,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "NewExpression",
                            "src": "7067:9:64",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_bytes_memory_$",
                              "typeString": "function (uint256) pure returns (bytes memory)"
                            },
                            "typeName": {
                              "id": 14696,
                              "name": "bytes",
                              "nodeType": "ElementaryTypeName",
                              "src": "7071:5:64",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_storage_ptr",
                                "typeString": "bytes"
                              }
                            }
                          },
                          "id": 14699,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7067:13:64",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory",
                            "typeString": "bytes memory"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "7048:32:64"
                      },
                      {
                        "assignments": [
                          14702
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 14702,
                            "name": "needle",
                            "nodeType": "VariableDeclaration",
                            "scope": 14729,
                            "src": "7094:14:64",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 14701,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "7094:7:64",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 14708,
                        "initialValue": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 14707,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "hexValue": "3332",
                            "id": 14703,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "7111:2:64",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_32_by_1",
                              "typeString": "int_const 32"
                            },
                            "value": "32"
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "+",
                          "rightExpression": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 14706,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "hexValue": "3635",
                              "id": 14704,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "7116:2:64",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_65_by_1",
                                "typeString": "int_const 65"
                              },
                              "value": "65"
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "*",
                            "rightExpression": {
                              "argumentTypes": null,
                              "id": 14705,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 14684,
                              "src": "7121:1:64",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "7116:6:64",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "7111:11:64",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "7094:28:64"
                      },
                      {
                        "externalReferences": [
                          {
                            "sig": {
                              "declaration": 14695,
                              "isOffset": false,
                              "isSlot": false,
                              "src": "7287:3:64",
                              "valueSize": 1
                            }
                          },
                          {
                            "sigs": {
                              "declaration": 14624,
                              "isOffset": false,
                              "isSlot": false,
                              "src": "7309:4:64",
                              "valueSize": 1
                            }
                          },
                          {
                            "needle": {
                              "declaration": 14702,
                              "isOffset": false,
                              "isSlot": false,
                              "src": "7315:6:64",
                              "valueSize": 1
                            }
                          },
                          {
                            "sig": {
                              "declaration": 14695,
                              "isOffset": false,
                              "isSlot": false,
                              "src": "7352:3:64",
                              "valueSize": 1
                            }
                          },
                          {
                            "sigs": {
                              "declaration": 14624,
                              "isOffset": false,
                              "isSlot": false,
                              "src": "7374:4:64",
                              "valueSize": 1
                            }
                          },
                          {
                            "needle": {
                              "declaration": 14702,
                              "isOffset": false,
                              "isSlot": false,
                              "src": "7384:6:64",
                              "valueSize": 1
                            }
                          },
                          {
                            "sig": {
                              "declaration": 14695,
                              "isOffset": false,
                              "isSlot": false,
                              "src": "7538:3:64",
                              "valueSize": 1
                            }
                          },
                          {
                            "sigs": {
                              "declaration": 14624,
                              "isOffset": false,
                              "isSlot": false,
                              "src": "7560:4:64",
                              "valueSize": 1
                            }
                          },
                          {
                            "needle": {
                              "declaration": 14702,
                              "isOffset": false,
                              "isSlot": false,
                              "src": "7570:6:64",
                              "valueSize": 1
                            }
                          }
                        ],
                        "id": 14709,
                        "nodeType": "InlineAssembly",
                        "operations": "{\n    mstore(add(sig, 0x20), mload(add(sigs, needle)))\n    mstore(add(sig, 0x40), mload(add(sigs, add(needle, 0x20))))\n    mstore8(add(sig, 0x60), mload(add(sigs, add(needle, 0x21))))\n}",
                        "src": "7172:448:64"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 14711,
                                "name": "bases",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 14613,
                                "src": "7621:5:64",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                  "typeString": "address[] memory"
                                }
                              },
                              "id": 14713,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 14712,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 14684,
                                "src": "7627:1:64",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "7621:8:64",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 14714,
                                "name": "quotes",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 14616,
                                "src": "7631:6:64",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                  "typeString": "address[] memory"
                                }
                              },
                              "id": 14716,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 14715,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 14684,
                                "src": "7638:1:64",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "7631:9:64",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 14717,
                                "name": "xrts",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 14619,
                                "src": "7642:4:64",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_uint128_$dyn_memory_ptr",
                                  "typeString": "uint128[] memory"
                                }
                              },
                              "id": 14719,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 14718,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 14684,
                                "src": "7647:1:64",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "7642:7:64",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint128",
                                "typeString": "uint128"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 14720,
                                "name": "whens",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 14622,
                                "src": "7651:5:64",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_uint64_$dyn_memory_ptr",
                                  "typeString": "uint64[] memory"
                                }
                              },
                              "id": 14722,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 14721,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 14684,
                                "src": "7657:1:64",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "7651:8:64",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint64",
                                "typeString": "uint64"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 14723,
                              "name": "sig",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 14695,
                              "src": "7661:3:64",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint128",
                                "typeString": "uint128"
                              },
                              {
                                "typeIdentifier": "t_uint64",
                                "typeString": "uint64"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "id": 14710,
                            "name": "update",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14610,
                            "src": "7614:6:64",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint128_$_t_uint64_$_t_bytes_memory_ptr_$returns$__$",
                              "typeString": "function (address,address,uint128,uint64,bytes memory)"
                            }
                          },
                          "id": 14724,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7614:51:64",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 14725,
                        "nodeType": "ExpressionStatement",
                        "src": "7614:51:64"
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 14690,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 14687,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14684,
                      "src": "6932:1:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 14688,
                        "name": "bases",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14613,
                        "src": "6936:5:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        }
                      },
                      "id": 14689,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "6936:12:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "6932:16:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 14727,
                  "initializationExpression": {
                    "assignments": [
                      14684
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 14684,
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "scope": 14729,
                        "src": "6917:9:64",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 14683,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "6917:7:64",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 14686,
                    "initialValue": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 14685,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "6929:1:64",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "6917:13:64"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 14692,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "6950:3:64",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 14691,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14684,
                        "src": "6950:1:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 14693,
                    "nodeType": "ExpressionStatement",
                    "src": "6950:3:64"
                  },
                  "nodeType": "ForStatement",
                  "src": "6912:764:64"
                }
              ]
            },
            "documentation": "@notice Update the price for many pairs\n@dev If the number representation of bases is lower than the one for quotes, and update is cheaper, as less manipulation is required.\n@param bases Array of addresses for the base tokens in the feed\n@param quotes Array of addresses for the quote tokens bases are denominated in\n@param xrts Array of the exchange rates for bases denominated in quotes. 10^18 is considered 1 to allow for decimal calculations\n@param whens Array of timestamps for the exchange rate value\n@param sigs Bytes array with the ordered concatenated signatures for the updates",
            "id": 14729,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "updateMany",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 14625,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14613,
                  "name": "bases",
                  "nodeType": "VariableDeclaration",
                  "scope": 14729,
                  "src": "6332:15:64",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 14611,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "6332:7:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 14612,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "6332:9:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 14616,
                  "name": "quotes",
                  "nodeType": "VariableDeclaration",
                  "scope": 14729,
                  "src": "6349:16:64",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 14614,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "6349:7:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 14615,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "6349:9:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 14619,
                  "name": "xrts",
                  "nodeType": "VariableDeclaration",
                  "scope": 14729,
                  "src": "6367:14:64",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint128_$dyn_memory_ptr",
                    "typeString": "uint128[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 14617,
                      "name": "uint128",
                      "nodeType": "ElementaryTypeName",
                      "src": "6367:7:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint128",
                        "typeString": "uint128"
                      }
                    },
                    "id": 14618,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "6367:9:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint128_$dyn_storage_ptr",
                      "typeString": "uint128[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 14622,
                  "name": "whens",
                  "nodeType": "VariableDeclaration",
                  "scope": 14729,
                  "src": "6383:14:64",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint64_$dyn_memory_ptr",
                    "typeString": "uint64[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 14620,
                      "name": "uint64",
                      "nodeType": "ElementaryTypeName",
                      "src": "6383:6:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "id": 14621,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "6383:8:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint64_$dyn_storage_ptr",
                      "typeString": "uint64[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 14624,
                  "name": "sigs",
                  "nodeType": "VariableDeclaration",
                  "scope": 14729,
                  "src": "6399:10:64",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 14623,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "6399:5:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6331:79:64"
            },
            "payable": false,
            "returnParameters": {
              "id": 14626,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6418:0:64"
            },
            "scope": 14887,
            "src": "6312:1370:64",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 14751,
              "nodeType": "Block",
              "src": "7738:145:64",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 14739,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 14735,
                          "name": "_operator",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 14731,
                          "src": "7756:9:64",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 14737,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "7777:1:64",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 14736,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "7769:7:64",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 14738,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7769:10:64",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "7756:23:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 14740,
                        "name": "ERROR_OPERATOR_ADDRESS_ZERO",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14369,
                        "src": "7781:27:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 14734,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        15156,
                        15157
                      ],
                      "referencedDeclaration": 15157,
                      "src": "7748:7:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 14741,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7748:61:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 14742,
                  "nodeType": "ExpressionStatement",
                  "src": "7748:61:64"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 14745,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 14743,
                      "name": "operator",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14379,
                      "src": "7819:8:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 14744,
                      "name": "_operator",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14731,
                      "src": "7830:9:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "7819:20:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 14746,
                  "nodeType": "ExpressionStatement",
                  "src": "7819:20:64"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 14748,
                        "name": "_operator",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14731,
                        "src": "7866:9:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 14747,
                      "name": "SetOperator",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14399,
                      "src": "7854:11:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 14749,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7854:22:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 14750,
                  "nodeType": "EmitStatement",
                  "src": "7849:27:64"
                }
              ]
            },
            "documentation": null,
            "id": 14752,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "_setOperator",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 14732,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14731,
                  "name": "_operator",
                  "nodeType": "VariableDeclaration",
                  "scope": 14752,
                  "src": "7710:17:64",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 14730,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7710:7:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7709:19:64"
            },
            "payable": false,
            "returnParameters": {
              "id": 14733,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7738:0:64"
            },
            "scope": 14887,
            "src": "7688:195:64",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 14774,
              "nodeType": "Block",
              "src": "7949:176:64",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 14762,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 14758,
                          "name": "_operatorOwner",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 14754,
                          "src": "7967:14:64",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 14760,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "7993:1:64",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 14759,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "7985:7:64",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 14761,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7985:10:64",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "7967:28:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 14763,
                        "name": "ERROR_OPERATOR_OWNER_ADDRESS_ZERO",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14372,
                        "src": "7997:33:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 14757,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        15156,
                        15157
                      ],
                      "referencedDeclaration": 15157,
                      "src": "7959:7:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 14764,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7959:72:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 14765,
                  "nodeType": "ExpressionStatement",
                  "src": "7959:72:64"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 14768,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 14766,
                      "name": "operatorOwner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14381,
                      "src": "8041:13:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 14767,
                      "name": "_operatorOwner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14754,
                      "src": "8057:14:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "8041:30:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 14769,
                  "nodeType": "ExpressionStatement",
                  "src": "8041:30:64"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 14771,
                        "name": "_operatorOwner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14754,
                        "src": "8103:14:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 14770,
                      "name": "SetOperatorOwner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14403,
                      "src": "8086:16:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 14772,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8086:32:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 14773,
                  "nodeType": "EmitStatement",
                  "src": "8081:37:64"
                }
              ]
            },
            "documentation": null,
            "id": 14775,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "_setOperatorOwner",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 14755,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14754,
                  "name": "_operatorOwner",
                  "nodeType": "VariableDeclaration",
                  "scope": 14775,
                  "src": "7916:22:64",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 14753,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7916:7:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7915:24:64"
            },
            "payable": false,
            "returnParameters": {
              "id": 14756,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7949:0:64"
            },
            "scope": 14887,
            "src": "7889:236:64",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 14813,
              "nodeType": "Block",
              "src": "8312:252:64",
              "statements": [
                {
                  "assignments": [
                    14785
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 14785,
                      "name": "pairOrdered",
                      "nodeType": "VariableDeclaration",
                      "scope": 14814,
                      "src": "8322:16:64",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 14784,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "8322:4:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 14790,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 14787,
                        "name": "base",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14777,
                        "src": "8356:4:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 14788,
                        "name": "quote",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14779,
                        "src": "8362:5:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 14786,
                      "name": "_isPairOrdered",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14886,
                      "src": "8341:14:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_address_$_t_address_$returns$_t_bool_$",
                        "typeString": "function (address,address) pure returns (bool)"
                      }
                    },
                    "id": 14789,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8341:27:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8322:46:64"
                },
                {
                  "assignments": [
                    14792
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 14792,
                      "name": "orderedBase",
                      "nodeType": "VariableDeclaration",
                      "scope": 14814,
                      "src": "8378:19:64",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 14791,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "8378:7:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 14797,
                  "initialValue": {
                    "argumentTypes": null,
                    "condition": {
                      "argumentTypes": null,
                      "id": 14793,
                      "name": "pairOrdered",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14785,
                      "src": "8400:11:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseExpression": {
                      "argumentTypes": null,
                      "id": 14795,
                      "name": "quote",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14779,
                      "src": "8421:5:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 14796,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "Conditional",
                    "src": "8400:26:64",
                    "trueExpression": {
                      "argumentTypes": null,
                      "id": 14794,
                      "name": "base",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14777,
                      "src": "8414:4:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8378:48:64"
                },
                {
                  "assignments": [
                    14799
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 14799,
                      "name": "orderedQuote",
                      "nodeType": "VariableDeclaration",
                      "scope": 14814,
                      "src": "8436:20:64",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 14798,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "8436:7:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 14804,
                  "initialValue": {
                    "argumentTypes": null,
                    "condition": {
                      "argumentTypes": null,
                      "id": 14800,
                      "name": "pairOrdered",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14785,
                      "src": "8459:11:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseExpression": {
                      "argumentTypes": null,
                      "id": 14802,
                      "name": "base",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14777,
                      "src": "8481:4:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 14803,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "Conditional",
                    "src": "8459:26:64",
                    "trueExpression": {
                      "argumentTypes": null,
                      "id": 14801,
                      "name": "quote",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14779,
                      "src": "8473:5:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8436:49:64"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 14808,
                            "name": "orderedBase",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14792,
                            "src": "8530:11:64",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 14809,
                            "name": "orderedQuote",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14799,
                            "src": "8543:12:64",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 14806,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 15140,
                            "src": "8513:3:64",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 14807,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encodePacked",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "8513:16:64",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function () pure returns (bytes memory)"
                          }
                        },
                        "id": 14810,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "8513:43:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 14805,
                      "name": "keccak256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 15147,
                      "src": "8503:9:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_sha3_pure$__$returns$_t_bytes32_$",
                        "typeString": "function () pure returns (bytes32)"
                      }
                    },
                    "id": 14811,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8503:54:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 14783,
                  "id": 14812,
                  "nodeType": "Return",
                  "src": "8496:61:64"
                }
              ]
            },
            "documentation": "@dev Returns a unique id for each pair, regardless of the order of base and quote",
            "id": 14814,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "_pairId",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 14780,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14777,
                  "name": "base",
                  "nodeType": "VariableDeclaration",
                  "scope": 14814,
                  "src": "8251:12:64",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 14776,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8251:7:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 14779,
                  "name": "quote",
                  "nodeType": "VariableDeclaration",
                  "scope": 14814,
                  "src": "8265:13:64",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 14778,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8265:7:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8250:29:64"
            },
            "payable": false,
            "returnParameters": {
              "id": 14783,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14782,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 14814,
                  "src": "8303:7:64",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 14781,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "8303:7:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8302:9:64"
            },
            "scope": 14887,
            "src": "8234:330:64",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 14846,
              "nodeType": "Block",
              "src": "8735:179:64",
              "statements": [
                {
                  "assignments": [
                    14826
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 14826,
                      "name": "pairOrdered",
                      "nodeType": "VariableDeclaration",
                      "scope": 14847,
                      "src": "8745:16:64",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 14825,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "8745:4:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 14831,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 14828,
                        "name": "base",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14816,
                        "src": "8779:4:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 14829,
                        "name": "quote",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14818,
                        "src": "8785:5:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 14827,
                      "name": "_isPairOrdered",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14886,
                      "src": "8764:14:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_address_$_t_address_$returns$_t_bool_$",
                        "typeString": "function (address,address) pure returns (bool)"
                      }
                    },
                    "id": 14830,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8764:27:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8745:46:64"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "condition": {
                      "argumentTypes": null,
                      "id": 14832,
                      "name": "pairOrdered",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14826,
                      "src": "8809:11:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 14841,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 14837,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "id": 14835,
                                  "name": "ONE",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 14333,
                                  "src": "8838:3:64",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "**",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "hexValue": "32",
                                  "id": 14836,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "8843:1:64",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_2_by_1",
                                    "typeString": "int_const 2"
                                  },
                                  "value": "2"
                                },
                                "src": "8838:6:64",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "/",
                              "rightExpression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 14839,
                                    "name": "xrt",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 14820,
                                    "src": "8855:3:64",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint128",
                                      "typeString": "uint128"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint128",
                                      "typeString": "uint128"
                                    }
                                  ],
                                  "id": 14838,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "8847:7:64",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint256_$",
                                    "typeString": "type(uint256)"
                                  },
                                  "typeName": "uint256"
                                },
                                "id": 14840,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "8847:12:64",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "8838:21:64",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "id": 14842,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "8837:23:64",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 14834,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "8829:7:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_uint128_$",
                          "typeString": "type(uint128)"
                        },
                        "typeName": "uint128"
                      },
                      "id": 14843,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "8829:32:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint128",
                        "typeString": "uint128"
                      }
                    },
                    "id": 14844,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "Conditional",
                    "src": "8809:52:64",
                    "trueExpression": {
                      "argumentTypes": null,
                      "id": 14833,
                      "name": "xrt",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14820,
                      "src": "8823:3:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint128",
                        "typeString": "uint128"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint128",
                      "typeString": "uint128"
                    }
                  },
                  "functionReturnParameters": 14824,
                  "id": 14845,
                  "nodeType": "Return",
                  "src": "8802:59:64"
                }
              ]
            },
            "documentation": "@dev Compute xrt depending on base and quote order.",
            "id": 14847,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "_pairXRT",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 14821,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14816,
                  "name": "base",
                  "nodeType": "VariableDeclaration",
                  "scope": 14847,
                  "src": "8661:12:64",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 14815,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8661:7:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 14818,
                  "name": "quote",
                  "nodeType": "VariableDeclaration",
                  "scope": 14847,
                  "src": "8675:13:64",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 14817,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8675:7:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 14820,
                  "name": "xrt",
                  "nodeType": "VariableDeclaration",
                  "scope": 14847,
                  "src": "8690:11:64",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint128",
                    "typeString": "uint128"
                  },
                  "typeName": {
                    "id": 14819,
                    "name": "uint128",
                    "nodeType": "ElementaryTypeName",
                    "src": "8690:7:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint128",
                      "typeString": "uint128"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8660:42:64"
            },
            "payable": false,
            "returnParameters": {
              "id": 14824,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14823,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 14847,
                  "src": "8726:7:64",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint128",
                    "typeString": "uint128"
                  },
                  "typeName": {
                    "id": 14822,
                    "name": "uint128",
                    "nodeType": "ElementaryTypeName",
                    "src": "8726:7:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint128",
                      "typeString": "uint128"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8725:9:64"
            },
            "scope": 14887,
            "src": "8643:271:64",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 14871,
              "nodeType": "Block",
              "src": "9025:86:64",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 14863,
                            "name": "PPF_v1_ID",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14328,
                            "src": "9069:9:64",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 14864,
                            "name": "base",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14849,
                            "src": "9080:4:64",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 14865,
                            "name": "quote",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14851,
                            "src": "9086:5:64",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 14866,
                            "name": "xrt",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14853,
                            "src": "9093:3:64",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint128",
                              "typeString": "uint128"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 14867,
                            "name": "when",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14855,
                            "src": "9098:4:64",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_uint128",
                              "typeString": "uint128"
                            },
                            {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 14861,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 15140,
                            "src": "9052:3:64",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 14862,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encodePacked",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "9052:16:64",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function () pure returns (bytes memory)"
                          }
                        },
                        "id": 14868,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "9052:51:64",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 14860,
                      "name": "keccak256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 15147,
                      "src": "9042:9:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_sha3_pure$__$returns$_t_bytes32_$",
                        "typeString": "function () pure returns (bytes32)"
                      }
                    },
                    "id": 14869,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9042:62:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 14859,
                  "id": 14870,
                  "nodeType": "Return",
                  "src": "9035:69:64"
                }
              ]
            },
            "documentation": null,
            "id": 14872,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "_setHash",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 14856,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14849,
                  "name": "base",
                  "nodeType": "VariableDeclaration",
                  "scope": 14872,
                  "src": "8938:12:64",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 14848,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8938:7:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 14851,
                  "name": "quote",
                  "nodeType": "VariableDeclaration",
                  "scope": 14872,
                  "src": "8952:13:64",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 14850,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8952:7:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 14853,
                  "name": "xrt",
                  "nodeType": "VariableDeclaration",
                  "scope": 14872,
                  "src": "8967:11:64",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint128",
                    "typeString": "uint128"
                  },
                  "typeName": {
                    "id": 14852,
                    "name": "uint128",
                    "nodeType": "ElementaryTypeName",
                    "src": "8967:7:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint128",
                      "typeString": "uint128"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 14855,
                  "name": "when",
                  "nodeType": "VariableDeclaration",
                  "scope": 14872,
                  "src": "8980:11:64",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 14854,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "8980:6:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8937:55:64"
            },
            "payable": false,
            "returnParameters": {
              "id": 14859,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14858,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 14872,
                  "src": "9016:7:64",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 14857,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "9016:7:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9015:9:64"
            },
            "scope": 14887,
            "src": "8920:191:64",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 14885,
              "nodeType": "Block",
              "src": "9198:36:64",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 14883,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 14881,
                      "name": "base",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14874,
                      "src": "9215:4:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 14882,
                      "name": "quote",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14876,
                      "src": "9222:5:64",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "9215:12:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 14880,
                  "id": 14884,
                  "nodeType": "Return",
                  "src": "9208:19:64"
                }
              ]
            },
            "documentation": null,
            "id": 14886,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "_isPairOrdered",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 14877,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14874,
                  "name": "base",
                  "nodeType": "VariableDeclaration",
                  "scope": 14886,
                  "src": "9141:12:64",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 14873,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "9141:7:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 14876,
                  "name": "quote",
                  "nodeType": "VariableDeclaration",
                  "scope": 14886,
                  "src": "9155:13:64",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 14875,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "9155:7:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9140:29:64"
            },
            "payable": false,
            "returnParameters": {
              "id": 14880,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14879,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 14886,
                  "src": "9192:4:64",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 14878,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "9192:4:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9191:6:64"
            },
            "scope": 14887,
            "src": "9117:117:64",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "private"
          }
        ],
        "scope": 14888,
        "src": "144:9092:64"
      }
    ],
    "src": "0:9237:64"
  },
  "compiler": {
    "name": "solc",
    "version": "0.4.24+commit.e67f0147.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "2.0.1",
  "updatedAt": "2019-09-04T11:02:55.803Z"
}