{
  "contractName": "Payroll",
  "abi": [
    {
      "constant": true,
      "inputs": [],
      "name": "hasInitialized",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "MANAGE_ALLOWED_TOKENS_ROLE",
      "outputs": [
        {
          "name": "",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "nextEmployee",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_script",
          "type": "bytes"
        }
      ],
      "name": "getEVMScriptExecutor",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "MODIFY_RATE_EXPIRY_ROLE",
      "outputs": [
        {
          "name": "",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "finance",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getRecoveryVault",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "ADD_BONUS_ROLE",
      "outputs": [
        {
          "name": "",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "feed",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "SET_EMPLOYEE_SALARY_ROLE",
      "outputs": [
        {
          "name": "",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "MODIFY_PRICE_FEED_ROLE",
      "outputs": [
        {
          "name": "",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "TERMINATE_EMPLOYEE_ROLE",
      "outputs": [
        {
          "name": "",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "token",
          "type": "address"
        }
      ],
      "name": "allowRecoverability",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "appId",
      "outputs": [
        {
          "name": "",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "ADD_REIMBURSEMENT_ROLE",
      "outputs": [
        {
          "name": "",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getInitializationBlock",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_token",
          "type": "address"
        }
      ],
      "name": "transferToVault",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_sender",
          "type": "address"
        },
        {
          "name": "_role",
          "type": "bytes32"
        },
        {
          "name": "_params",
          "type": "uint256[]"
        }
      ],
      "name": "canPerform",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getEVMScriptRegistry",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "rateExpiryTime",
      "outputs": [
        {
          "name": "",
          "type": "uint64"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "ADD_EMPLOYEE_ROLE",
      "outputs": [
        {
          "name": "",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "kernel",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "isPetrified",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "denominationToken",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "employeeId",
          "type": "uint256"
        },
        {
          "indexed": true,
          "name": "accountAddress",
          "type": "address"
        },
        {
          "indexed": false,
          "name": "initialDenominationSalary",
          "type": "uint256"
        },
        {
          "indexed": false,
          "name": "startDate",
          "type": "uint64"
        },
        {
          "indexed": false,
          "name": "role",
          "type": "string"
        }
      ],
      "name": "AddEmployee",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "employeeId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "name": "endDate",
          "type": "uint64"
        }
      ],
      "name": "TerminateEmployee",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "employeeId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "name": "denominationSalary",
          "type": "uint256"
        }
      ],
      "name": "SetEmployeeSalary",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "employeeId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "AddEmployeeAccruedSalary",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "employeeId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "AddEmployeeBonus",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "employeeId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "AddEmployeeReimbursement",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "employeeId",
          "type": "uint256"
        },
        {
          "indexed": true,
          "name": "newAccountAddress",
          "type": "address"
        },
        {
          "indexed": true,
          "name": "oldAccountAddress",
          "type": "address"
        }
      ],
      "name": "ChangeAddressByEmployee",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "employeeId",
          "type": "uint256"
        }
      ],
      "name": "DetermineAllocation",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "employeeId",
          "type": "uint256"
        },
        {
          "indexed": true,
          "name": "accountAddress",
          "type": "address"
        },
        {
          "indexed": true,
          "name": "token",
          "type": "address"
        },
        {
          "indexed": false,
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "name": "exchangeRate",
          "type": "uint256"
        },
        {
          "indexed": false,
          "name": "paymentReference",
          "type": "string"
        }
      ],
      "name": "SendPayment",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "token",
          "type": "address"
        },
        {
          "indexed": false,
          "name": "allowed",
          "type": "bool"
        }
      ],
      "name": "SetAllowedToken",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "feed",
          "type": "address"
        }
      ],
      "name": "SetPriceFeed",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "name": "time",
          "type": "uint64"
        }
      ],
      "name": "SetRateExpiryTime",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "executor",
          "type": "address"
        },
        {
          "indexed": false,
          "name": "script",
          "type": "bytes"
        },
        {
          "indexed": false,
          "name": "input",
          "type": "bytes"
        },
        {
          "indexed": false,
          "name": "returnData",
          "type": "bytes"
        }
      ],
      "name": "ScriptResult",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "vault",
          "type": "address"
        },
        {
          "indexed": true,
          "name": "token",
          "type": "address"
        },
        {
          "indexed": false,
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "RecoverToVault",
      "type": "event"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_finance",
          "type": "address"
        },
        {
          "name": "_denominationToken",
          "type": "address"
        },
        {
          "name": "_priceFeed",
          "type": "address"
        },
        {
          "name": "_rateExpiryTime",
          "type": "uint64"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_token",
          "type": "address"
        },
        {
          "name": "_allowed",
          "type": "bool"
        }
      ],
      "name": "setAllowedToken",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_feed",
          "type": "address"
        }
      ],
      "name": "setPriceFeed",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_time",
          "type": "uint64"
        }
      ],
      "name": "setRateExpiryTime",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_accountAddress",
          "type": "address"
        },
        {
          "name": "_initialDenominationSalary",
          "type": "uint256"
        },
        {
          "name": "_startDate",
          "type": "uint64"
        },
        {
          "name": "_role",
          "type": "string"
        }
      ],
      "name": "addEmployee",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_employeeId",
          "type": "uint256"
        },
        {
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "addBonus",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_employeeId",
          "type": "uint256"
        },
        {
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "addReimbursement",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_employeeId",
          "type": "uint256"
        },
        {
          "name": "_denominationSalary",
          "type": "uint256"
        }
      ],
      "name": "setEmployeeSalary",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_employeeId",
          "type": "uint256"
        },
        {
          "name": "_endDate",
          "type": "uint64"
        }
      ],
      "name": "terminateEmployee",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_newAccountAddress",
          "type": "address"
        }
      ],
      "name": "changeAddressByEmployee",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_tokens",
          "type": "address[]"
        },
        {
          "name": "_distribution",
          "type": "uint256[]"
        }
      ],
      "name": "determineAllocation",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_type",
          "type": "uint8"
        },
        {
          "name": "_requestedAmount",
          "type": "uint256"
        },
        {
          "name": "_minRates",
          "type": "uint256[]"
        }
      ],
      "name": "payday",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "isForwarder",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_evmScript",
          "type": "bytes"
        }
      ],
      "name": "forward",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_sender",
          "type": "address"
        },
        {
          "name": "",
          "type": "bytes"
        }
      ],
      "name": "canForward",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_accountAddress",
          "type": "address"
        }
      ],
      "name": "getEmployeeIdByAddress",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_employeeId",
          "type": "uint256"
        }
      ],
      "name": "getEmployee",
      "outputs": [
        {
          "name": "accountAddress",
          "type": "address"
        },
        {
          "name": "denominationSalary",
          "type": "uint256"
        },
        {
          "name": "accruedSalary",
          "type": "uint256"
        },
        {
          "name": "bonus",
          "type": "uint256"
        },
        {
          "name": "reimbursements",
          "type": "uint256"
        },
        {
          "name": "lastPayroll",
          "type": "uint64"
        },
        {
          "name": "endDate",
          "type": "uint64"
        },
        {
          "name": "allocationTokens",
          "type": "address[]"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_employeeId",
          "type": "uint256"
        }
      ],
      "name": "getTotalOwedSalary",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_employeeId",
          "type": "uint256"
        },
        {
          "name": "_token",
          "type": "address"
        }
      ],
      "name": "getAllocation",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_token",
          "type": "address"
        }
      ],
      "name": "isTokenAllowed",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": "0x6080604052620000176401000000006200001d810204565b6200023b565b6200003064010000000062000125810204565b60408051808201909152601881527f494e49545f414c52454144595f494e495449414c495a45440000000000000000602082015290156200010c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015620000d0578181015183820152602001620000b6565b50505050905090810190601f168015620000fe5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506200012360001964010000000062000154810204565b565b60006200014f60008051602062005fde833981519152640100000000620037666200023382021704565b905090565b6200016764010000000062000125810204565b60408051808201909152601881527f494e49545f414c52454144595f494e495449414c495a454400000000000000006020820152901562000206576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015620000d0578181015183820152602001620000b6565b506200023060008051602062005fde833981519152826401000000006200376a6200023782021704565b50565b5490565b9055565b615d93806200024b6000396000f3006080604052600436106102195763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416630803fac0811461021e5780630a0c75aa146102475780631216906b146102645780631bb440b1146102925780631bfe5f61146102b95780632350a84d146102ce57806327e02676146102f35780632914b9bd146103245780632ee235ef146103a6578063313b7b19146103bb57806332f0a3b5146103d057806335285a0f146103e557806337a7b7d8146103fa5780633fe3f1cf1461040f578063456fbfea146104565780634fd52f421461046b578063595da7291461048d5780637100650e146104a2578063724e78da146104b75780637e7db6e1146104e557806380afdea81461051357806388ea9247146105285780638aaa22841461053d5780638b3dd749146105705780639d4941d814610585578063a1658fad146105b3578063a479e50814610627578063a52e605f1461063c578063b02b69d614610654578063b7cafcc81461066f578063bca9a5c51461068a578063bef80ce11461077b578063bf510ff4146107ad578063c0774df3146107c2578063d4aae0c414610836578063d948d4681461084b578063dcb33f3e146108a4578063de4796ed146108cf578063ea199a83146108e4578063f6b9fdfb14610930578063f9eaee0d14610945578063fd64eccb14610973578063fe2fdf0b14610988578063ffd5acad146109b4575b600080fd5b34801561022a57600080fd5b506102336109e2565b604080519115158252519081900360200190f35b34801561025357600080fd5b50610262600435602435610a0c565b005b34801561027057600080fd5b5061026273ffffffffffffffffffffffffffffffffffffffff60043516610c8e565b34801561029e57600080fd5b506102a7610f25565b60408051918252519081900360200190f35b3480156102c557600080fd5b506102a7610f49565b3480156102da57600080fd5b5061026260043567ffffffffffffffff60243516610f4f565b3480156102ff57600080fd5b506102a760043573ffffffffffffffffffffffffffffffffffffffff602435166110e6565b34801561033057600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261037d9436949293602493928401919081908401838280828437509497506111cd9650505050505050565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b3480156103b257600080fd5b506102a76112db565b3480156103c757600080fd5b5061037d6112ff565b3480156103dc57600080fd5b5061037d61131b565b3480156103f157600080fd5b506102a76113ba565b34801561040657600080fd5b5061037d6113de565b34801561041b57600080fd5b5061026273ffffffffffffffffffffffffffffffffffffffff6004358116906024358116906044351667ffffffffffffffff606435166113fa565b34801561046257600080fd5b506102a76115c0565b34801561047757600080fd5b5061026267ffffffffffffffff600435166115e4565b34801561049957600080fd5b506102a76116ea565b3480156104ae57600080fd5b506102a761170e565b3480156104c357600080fd5b5061026273ffffffffffffffffffffffffffffffffffffffff60043516611732565b3480156104f157600080fd5b5061023373ffffffffffffffffffffffffffffffffffffffff6004351661182a565b34801561051f57600080fd5b506102a7611830565b34801561053457600080fd5b506102a7611860565b34801561054957600080fd5b5061026273ffffffffffffffffffffffffffffffffffffffff600435166024351515611884565b34801561057c57600080fd5b506102a7611ab3565b34801561059157600080fd5b5061026273ffffffffffffffffffffffffffffffffffffffff60043516611ade565b3480156105bf57600080fd5b50604080516020600460443581810135838102808601850190965280855261023395833573ffffffffffffffffffffffffffffffffffffffff16956024803596369695606495939492019291829185019084908082843750949750611e009650505050505050565b34801561063357600080fd5b5061037d611f90565b34801561064857600080fd5b506102a7600435612084565b34801561066057600080fd5b5061026260043560243561214e565b34801561067b57600080fd5b506102626004356024356122d4565b34801561069657600080fd5b506106a260043561245a565b604051808973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018881526020018781526020018681526020018581526020018467ffffffffffffffff1667ffffffffffffffff1681526020018367ffffffffffffffff1667ffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019060200280838360005b83811015610760578181015183820152602001610748565b50505050905001995050505050505050505060405180910390f35b34801561078757600080fd5b50610790612618565b6040805167ffffffffffffffff9092168252519081900360200190f35b3480156107b957600080fd5b506102a7612640565b3480156107ce57600080fd5b5060408051602060046024803582810135601f810185900485028601850190965285855261023395833573ffffffffffffffffffffffffffffffffffffffff169536956044949193909101919081908401838280828437509497506126649650505050505050565b34801561084257600080fd5b5061037d61269a565b34801561085757600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526102629436949293602493928401919081908401838280828437509497506126c59650505050505050565b3480156108b057600080fd5b506102626004803560ff169060248035916044359182019101356127f9565b3480156108db57600080fd5b50610233612d15565b3480156108f057600080fd5b506102626004803573ffffffffffffffffffffffffffffffffffffffff1690602480359160443567ffffffffffffffff1691606435908101910135612d46565b34801561093c57600080fd5b5061037d612e6a565b34801561095157600080fd5b5061023373ffffffffffffffffffffffffffffffffffffffff60043516612e86565b34801561097f57600080fd5b50610233612f5a565b34801561099457600080fd5b506102626024600480358281019290820135918135918201910135612f5f565b3480156109c057600080fd5b506102a773ffffffffffffffffffffffffffffffffffffffff600435166134da565b6000806109ed611ab3565b90508015801590610a05575080610a026135ca565b10155b91505b5090565b60008281526004602052604081206001015481907fea9ac65018da2421cf419ee2152371440c08267a193a33ccc1e39545d197e44d90610a4f90869086906135ce565b610a5a338383611e00565b60408051808201909152600f81527f4150505f415554485f4641494c454400000000000000000000000000000000006020820152901515610b33576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610af8578181015183820152602001610ae0565b50505050905090810190601f168015610b255780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5085610b3e81613647565b60408051808201909152601b81527f504159524f4c4c5f4e4f4e5f4143544956455f454d504c4f59454500000000006020820152901515610bdb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b5060008781526004602052604081209550610bf7908690613664565b9350610c0387856136f1565b610c0b613754565b60058601805467ffffffffffffffff929092167fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000009092169190911790556001850186905560408051878152905188917fec4f21c1230ce7d88517d17b1f8ae85725a029dc2066fe2ed6401f1b01024e05919081900360200190a250505050505050565b33600081815260056020908152604080832054835260048252808320548151808301909252601d82527f504159524f4c4c5f53454e4445525f444f45535f4e4f545f4d4154434800000092820192909252919283929173ffffffffffffffffffffffffffffffffffffffff1614610d61576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b50610d8b7fe855346402235fdd185c890e68d2c4ecad599b88587635ee285bce2fda58dacb613766565b60408051808201909152601981527f5245454e5452414e43595f5245454e5452414e545f43414c4c0000000000000060208201529015610e27576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b50610e597fe855346402235fdd185c890e68d2c4ecad599b88587635ee285bce2fda58dacb600163ffffffff61376a16565b50503360009081526005602090815260408083205480845260049092529091205473ffffffffffffffffffffffffffffffffffffffff16610e9a828461376e565b73ffffffffffffffffffffffffffffffffffffffff80821660008181526005602052604080822082905551919286169185917f5a3949ffa1f5851afea532ad9d4c7dfb51bf68f7d5964ff77f3bb4c0abedbbe491a4610f207fe855346402235fdd185c890e68d2c4ecad599b88587635ee285bce2fda58dacb600063ffffffff61376a16565b505050565b7f0be34987c45700ee3fae8c55e270418ba903337decc6bacb1879504be9331c0681565b60035481565b7f69c67f914d12b6440e7ddf01961214818d9158fbcb19211e0ff42800fdea9242610f848367ffffffffffffffff8416613946565b610f8f338383611e00565b60408051808201909152600f81527f4150505f415554485f4641494c45440000000000000000000000000000000000602082015290151561102c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b508361103781613647565b60408051808201909152601b81527f504159524f4c4c5f4e4f4e5f4143544956455f454d504c4f594545000000000060208201529015156110d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b506110df85856139a1565b5050505050565b6000826110f281613ae4565b60408051808201909152601d81527f504159524f4c4c5f454d504c4f5945455f444f45534e545f4558495354000000602082015290151561118f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b50600084815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845260070190915290205491505b5092915050565b60006111d7611f90565b73ffffffffffffffffffffffffffffffffffffffff166304bf2a7f836040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561125b578181015183820152602001611243565b50505050905090810190601f1680156112885780820380516001836020036101000a031916815260200191505b5092505050602060405180830381600087803b1580156112a757600080fd5b505af11580156112bb573d6000803e3d6000fd5b505050506040513d60208110156112d157600080fd5b505190505b919050565b7f79fe989a8899060dfbdabb174ebb96616fa9f1d9dadd739f8d814cbab452404e81565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b600061132561269a565b73ffffffffffffffffffffffffffffffffffffffff166332f0a3b56040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561138857600080fd5b505af115801561139c573d6000803e3d6000fd5b505050506040513d60208110156113b257600080fd5b505190505b90565b7fceca7e2f5eb749a87aaf68f3f76d6b9251aa2f4600f13f93c5a4adf7a72df4ae81565b60025473ffffffffffffffffffffffffffffffffffffffff1681565b611402611ab3565b60408051808201909152601881527f494e49545f414c52454144595f494e495449414c495a454400000000000000006020820152901561149e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b506114a7613b0e565b6114b084613bed565b60408051808201909152601c81527f504159524f4c4c5f46494e414e43455f4e4f545f434f4e545241435400000000602082015290151561154d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b506000805473ffffffffffffffffffffffffffffffffffffffff8087167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560018054928616929091169190911790556115ac82613c20565b6115b581613d3c565b505060016003555050565b7fea9ac65018da2421cf419ee2152371440c08267a193a33ccc1e39545d197e44d81565b6002547f79fe989a8899060dfbdabb174ebb96616fa9f1d9dadd739f8d814cbab452404e906116389067ffffffffffffffff8085169174010000000000000000000000000000000000000000900416613946565b611643338383611e00565b60408051808201909152600f81527f4150505f415554485f4641494c4544000000000000000000000000000000000060208201529015156116e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b50610f2083613d3c565b7f74350efbcba8b85341c5bbf70cc34e2a585fc1463524773a12fa0a71d4eb930281565b7f69c67f914d12b6440e7ddf01961214818d9158fbcb19211e0ff42800fdea924281565b6002547f74350efbcba8b85341c5bbf70cc34e2a585fc1463524773a12fa0a71d4eb93029061177890839073ffffffffffffffffffffffffffffffffffffffff16613e75565b611783338383611e00565b60408051808201909152600f81527f4150505f415554485f4641494c454400000000000000000000000000000000006020820152901515611820576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b50610f2083613c20565b50600190565b600061185b7fd625496217aa6a3453eecb9c3489dc5a53e6c67b444329ea2b2cbc9ff547639b613766565b905090565b7f90698b9d54427f1e41636025017309bdb1b55320da960c8845bab0a504b01a1681565b7f0be34987c45700ee3fae8c55e270418ba903337decc6bacb1879504be9331c066118ae83613ead565b6118b9338383611e00565b60408051808201909152600f81527f4150505f415554485f4641494c454400000000000000000000000000000000006020820152901515611956576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b5073ffffffffffffffffffffffffffffffffffffffff8416600090815260066020908152604091829020548251808401909352601983527f504159524f4c4c5f544f4b454e5f414c52454144595f534554000000000000009183019190915260ff1615158415151415611a25576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b5073ffffffffffffffffffffffffffffffffffffffff841660008181526006602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016871515908117909155825190815291517fe589eb036e62c07e307aa4d441bd39c81e8bd86f349eaacb0caa06b1477f7f9a9281900390910190a250505050565b600061185b7febb05b386a8d34882b8711d156f463690983dc47815980fb82aeeff1aa43579e613766565b6000806000611aec8461182a565b60408051808201909152601281527f5245434f5645525f444953414c4c4f57454400000000000000000000000000006020820152901515611b89576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b50611b9261131b565b9250611b9d83613bed565b60408051808201909152601a81527f5245434f5645525f5641554c545f4e4f545f434f4e54524143540000000000006020820152901515611c3a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b5073ffffffffffffffffffffffffffffffffffffffff84161515611ca5576040513031925073ffffffffffffffffffffffffffffffffffffffff84169083156108fc029084906000818181858888f19350505050158015611c9f573d6000803e3d6000fd5b50611d95565b5082611ccd73ffffffffffffffffffffffffffffffffffffffff82163063ffffffff613ed216565b9150611cf673ffffffffffffffffffffffffffffffffffffffff8216848463ffffffff61400b16565b60408051808201909152601d81527f5245434f5645525f544f4b454e5f5452414e534645525f4641494c45440000006020820152901515611d93576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b505b8373ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f596caf56044b55fb8c4ca640089bbc2b63cae3e978b851f5745cbb7c5b288e02846040518082815260200191505060405180910390a350505050565b600080611e0b6109e2565b1515611e1a5760009150611f88565b611e2261269a565b905073ffffffffffffffffffffffffffffffffffffffff81161515611e4a5760009150611f88565b8073ffffffffffffffffffffffffffffffffffffffff1663fdef9106863087611e72886140a3565b6040517c010000000000000000000000000000000000000000000000000000000063ffffffff871602815273ffffffffffffffffffffffffffffffffffffffff808616600483019081529085166024830152604482018490526080606483019081528351608484015283519192909160a490910190602085019080838360005b83811015611f0a578181015183820152602001611ef2565b50505050905090810190601f168015611f375780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b158015611f5957600080fd5b505af1158015611f6d573d6000803e3d6000fd5b505050506040513d6020811015611f8357600080fd5b505191505b509392505050565b600080611f9b61269a565b604080517fbe00bbd80000000000000000000000000000000000000000000000000000000081527fd6f028ca0e8edb4a8c9757ca4fdccab25fa1e0317da1188108f7d2dee14902fb60048201527fddbcfd564f642ab5627cf68b9b7d374fb4f8a36e941a75d89c87998cef03bd616024820152905173ffffffffffffffffffffffffffffffffffffffff929092169163be00bbd8916044808201926020929091908290030181600087803b15801561205257600080fd5b505af1158015612066573d6000803e3d6000fd5b505050506040513d602081101561207c57600080fd5b505192915050565b60008161209081613ae4565b60408051808201909152601d81527f504159524f4c4c5f454d504c4f5945455f444f45534e545f4558495354000000602082015290151561212d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b506000838152600460205260409020612145906140ad565b91505b50919050565b7fceca7e2f5eb749a87aaf68f3f76d6b9251aa2f4600f13f93c5a4adf7a72df4ae6121798383613946565b612184338383611e00565b60408051808201909152600f81527f4150505f415554485f4641494c454400000000000000000000000000000000006020820152901515612221576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b508361222c81613647565b60408051808201909152601b81527f504159524f4c4c5f4e4f4e5f4143544956455f454d504c4f594545000000000060208201529015156122c9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b506110df85856140fe565b7f90698b9d54427f1e41636025017309bdb1b55320da960c8845bab0a504b01a166122ff8383613946565b61230a338383611e00565b60408051808201909152600f81527f4150505f415554485f4641494c4544000000000000000000000000000000000060208201529015156123a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b50836123b281613647565b60408051808201909152601b81527f504159524f4c4c5f4e4f4e5f4143544956455f454d504c4f5945450000000000602082015290151561244f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b506110df8585614161565b6000806000806000806000606060008961247381613ae4565b60408051808201909152601d81527f504159524f4c4c5f454d504c4f5945455f444f45534e545f45584953540000006020820152901515612510576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b50600460008c815260200190815260200160002091508160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169950816001015498508160020154975081600301549650816004015495508160050160009054906101000a900467ffffffffffffffff1694508160050160089054906101000a900467ffffffffffffffff1693508160060180548060200260200160405190810160405280929190818152602001828054801561260457602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116125d9575b505050505092505050919395975091939597565b60025474010000000000000000000000000000000000000000900467ffffffffffffffff1681565b7f9ecdc3c63716b45d0756eece5fe1614cae1889ec5a1ce62b3127c1f1f1615d6e81565b73ffffffffffffffffffffffffffffffffffffffff821660009081526005602052604081205461269390613647565b9392505050565b600061185b7f4172f0f7d2289153072b0a6ca36959e0cbe2efc3afe50fc81636caa96338137b613766565b6060806126d23384612664565b60408051808201909152601781527f504159524f4c4c5f43414e5f4e4f545f464f5257415244000000000000000000602082015290151561276f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b50604080516000815260016020808301828152606084018552929550919290919085019080388339505060008054835193945073ffffffffffffffffffffffffffffffffffffffff169284925081106127c457fe5b73ffffffffffffffffffffffffffffffffffffffff9092166020928302909101909101526127f38383836141c6565b50505050565b33600081815260056020908152604080832054835260048252808320548151808301909252601d82527f504159524f4c4c5f53454e4445525f444f45535f4e4f545f4d4154434800000092820192909252919283928392839283928392909173ffffffffffffffffffffffffffffffffffffffff909116146128d7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b506129017fe855346402235fdd185c890e68d2c4ecad599b88587635ee285bce2fda58dacb613766565b60408051808201909152601981527f5245454e5452414e43595f5245454e5452414e545f43414c4c000000000000006020820152901561299d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b506129cf7fe855346402235fdd185c890e68d2c4ecad599b88587635ee285bce2fda58dacb600163ffffffff61376a16565b33600090815260056020908152604080832054808452600490925290912090955093506129fb8461489c565b861580612a0b5750600684015487145b60408051808201909152601a81527f504159524f4c4c5f4d494e5f52415445535f4d49534d415443480000000000006020820152901515612aa8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b5060008a6002811115612ab757fe5b1415612ae357612ac6846140ad565b9250612ad2838a614af1565b9550612ade8487614c3f565b612bf8565b60018a6002811115612af157fe5b1415612b245783600401549150612b08828a614af1565b9550612b1a828763ffffffff614dd616565b6004850155612bf8565b60028a6002811115612b3257fe5b1415612b6457506003830154612b48818a614af1565b9550612b5a818763ffffffff614dd616565b6003850155612bf8565b604080518082018252601c81527f504159524f4c4c5f494e56414c49445f5041594d454e545f5459504500000000602080830191825292517f08c379a000000000000000000000000000000000000000000000000000000000815260048101938452825160248201528251929392839260449092019190808383600083811015610af8578181015183820152602001610ae0565b612c31858b888b8b8080602002602001604051908101604052809392919081815260200183836020028082843750614e81945050505050565b60408051808201909152601481527f504159524f4c4c5f4e4f5448494e475f504149440000000000000000000000006020820152901515612cce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b50612cd885615374565b612d097fe855346402235fdd185c890e68d2c4ecad599b88587635ee285bce2fda58dacb600063ffffffff61376a16565b50505050505050505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff612d40611ab3565b14905090565b7f9ecdc3c63716b45d0756eece5fe1614cae1889ec5a1ce62b3127c1f1f1615d6e612d7c868667ffffffffffffffff8716615483565b612d87338383611e00565b60408051808201909152600f81527f4150505f415554485f4641494c454400000000000000000000000000000000006020820152901515612e24576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b50612e6187878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437506154ae945050505050565b50505050505050565b60015473ffffffffffffffffffffffffffffffffffffffff1681565b6000612e906109e2565b60408051808201909152601481527f494e49545f4e4f545f494e495449414c495a45440000000000000000000000006020820152901515612f2d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b505073ffffffffffffffffffffffffffffffffffffffff1660009081526006602052604090205460ff1690565b600190565b33600081815260056020908152604080832054835260048252808320548151808301909252601d82527f504159524f4c4c5f53454e4445525f444f45535f4e4f545f4d415443480000009282019290925291928392606092849283929173ffffffffffffffffffffffffffffffffffffffff1614613039576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b506130637fe855346402235fdd185c890e68d2c4ecad599b88587635ee285bce2fda58dacb613766565b60408051808201909152601981527f5245454e5452414e43595f5245454e5452414e545f43414c4c00000000000000602082015290156130ff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b506131317fe855346402235fdd185c890e68d2c4ecad599b88587635ee285bce2fda58dacb600163ffffffff61376a16565b60408051808201909152601a81527f504159524f4c4c5f4d41585f414c4c4f5745445f544f4b454e53000000000000602082015260148911156131d0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b5060408051606081018252602181527f504159524f4c4c5f544f4b454e5f414c4c4f434154494f4e5f4d49534d41544360208201527f480000000000000000000000000000000000000000000000000000000000000091810191909152888714613296576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b503360009081526005602090815260408083205480845260048352928190206006810180548351818602810186019094528084529499509097509092909183018282801561331a57602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116132ef575b50505050509250600091505b825182101561338057836007016000848481518110151561334357fe5b602090810290910181015173ffffffffffffffffffffffffffffffffffffffff168252810191909152604001600090812055600190910190613326565b61338e600685016000615d2c565b5060005b8781101561346a57600684018989838181106133aa57fe5b835460018101855560009485526020948590200180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff959092029390930135939093169290921790555086868281811061341757fe5b905060200201358460070160008b8b85818110151561343257fe5b6020908102929092013573ffffffffffffffffffffffffffffffffffffffff1683525081019190915260400160002055600101613392565b6134738461489c565b60405185907f2e68f13a32c51068abe241b8c7db891d265385114938311f83a31583b2a11d7a90600090a26134cf7fe855346402235fdd185c890e68d2c4ecad599b88587635ee285bce2fda58dacb600063ffffffff61376a16565b505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600560209081526040808320548151808301909252601d82527f504159524f4c4c5f454d504c4f5945455f444f45534e545f4558495354000000928201929092529015156135a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b505073ffffffffffffffffffffffffffffffffffffffff1660009081526005602052604090205490565b4390565b604080516003808252608082019092526060916020820183803883390190505090508381600081518110151561360057fe5b60209081029091010152805183908290600190811061361b57fe5b60209081029091010152805182908290600290811061363657fe5b602090810290910101529392505050565b600081815260046020526040812061365e9061561d565b92915050565b60008060008061367386615651565b925082151561368557600093506136e8565b8560010154915084156136d857508082028183828115156136a257fe5b0414156136af57806136d1565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b93506136e8565b6136d1828463ffffffff6156ca16565b50505092915050565b60008281526004602052604090206002810154613714908363ffffffff61578c16565b600282015560408051838152905184917f494c76e58dab1186acc63fd537885795bd237ae0feb2d4d3f6092ca77f594f83919081900360200190a2505050565b600061185b613761615831565b615835565b5490565b9055565b60408051808201909152601d81527f504159524f4c4c5f454d504c4f5945455f4e554c4c5f41444452455353000000602082015273ffffffffffffffffffffffffffffffffffffffff82161515613821576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b5073ffffffffffffffffffffffffffffffffffffffff8116600090815260056020908152604091829020548251808401909352601e83527f504159524f4c4c5f454d504c4f5945455f414c52454144595f4558495354000091830191909152156138e7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b506000828152600460209081526040808320805473ffffffffffffffffffffffffffffffffffffffff9095167fffffffffffffffffffffffff000000000000000000000000000000000000000090951685179055928252600590522055565b60408051600280825260608083018452926020830190803883390190505090508281600081518110151561397657fe5b60209081029091010152805182908290600190811061399157fe5b6020908102909101015292915050565b6139a9613754565b60408051808201909152601d81527f504159524f4c4c5f504153545f5445524d494e4154494f4e5f4441544500000060208201529067ffffffffffffffff9081169083161015613a55576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b5060008281526004602090815260409182902060050180547fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff166801000000000000000067ffffffffffffffff8616908102919091179091558251908152915184927f64eed8d28fe1c502b235bba967ed50243ed5fbda55daa5388ede25613185f8af92908290030190a25050565b60009081526004602052604090205473ffffffffffffffffffffffffffffffffffffffff16151590565b613b16611ab3565b60408051808201909152601881527f494e49545f414c52454144595f494e495449414c495a4544000000000000000060208201529015613bb2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b50613beb613bbe6135ca565b7febb05b386a8d34882b8711d156f463690983dc47815980fb82aeeff1aa43579e9063ffffffff61376a16565b565b60008073ffffffffffffffffffffffffffffffffffffffff83161515613c165760009150612148565b50506000903b1190565b613c2981613bed565b60408051808201909152601981527f504159524f4c4c5f464545445f4e4f545f434f4e5452414354000000000000006020820152901515613cc6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b50600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691909117918290556040519116907ff724a45d041687842411f2b977ef22ab8f43c8f1104f4592b42a00f9b34a643d90600090a250565b60408051808201909152601d81527f504159524f4c4c5f4558504952595f54494d455f544f4f5f53484f52540000006020820152603c67ffffffffffffffff83161015613de5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b506002805467ffffffffffffffff808416740100000000000000000000000000000000000000009081027fffffffff0000000000000000ffffffffffffffffffffffffffffffffffffffff9093169290921792839055604080519290930416815290517f79f849dfd7cf0efc92191ac811c877afb4d27891c560189c77117e755b103a3e9181900360200190a150565b60606126938373ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16613946565b606061365e8273ffffffffffffffffffffffffffffffffffffffff166158e9565b5490565b6040805173ffffffffffffffffffffffffffffffffffffffff83166024808301919091528251808303909101815260449091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f70a08231000000000000000000000000000000000000000000000000000000001790526000908180613f5f868461592a565b60408051808201909152601c81527f534146455f4552435f32305f42414c414e43455f52455645525445440000000060208201529193509150821515614001576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b5095945050505050565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260009061409a858261595b565b95945050505050565b8051602002815290565b60008060006140bd846001613664565b9150836002015482019050818110156140f357507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b8092505b5050919050565b60008281526004602052604090206003810154614121908363ffffffff61578c16565b600382015560408051838152905184917f02eaf727c9cb2b9ae1c0d973092bfa6431d79978bf1db9f57ec4279a8c1eb85a919081900360200190a2505050565b600082815260046020819052604090912090810154614186908363ffffffff61578c16565b600482015560408051838152905184917f594fd22b20a17265cf2b4459acd7f1b6fa11f6a0046fa052bba6ef7f1ee95392919081900360200190a2505050565b60606000806060806141d66109e2565b60408051808201909152601481527f494e49545f4e4f545f494e495449414c495a45440000000000000000000000006020820152901515614273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b5060008061427f61269a565b9150614289611830565b90506142948a6111cd565b60408051808201909152601b81527f45564d52554e5f4558454355544f525f554e415641494c41424c450000000000602082015290965073ffffffffffffffffffffffffffffffffffffffff8716151561434a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b506040516060602482019081528b5160848301528b517f279cea3500000000000000000000000000000000000000000000000000000000975087928d928d928d9282916044820191606481019160a490910190602089019080838360005b838110156143c05781810151838201526020016143a8565b50505050905090810190601f1680156143ed5780820380516001836020036101000a031916815260200191505b50848103835286518152865160209182019188019080838360005b83811015614420578181015183820152602001614408565b50505050905090810190601f16801561444d5780820380516001836020036101000a031916815260200191505b508481038252855181528551602091820191808801910280838360005b8381101561448257818101518382015260200161446a565b505050509050019650505050505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050509350600080855160208701895af4604051935080801561458757603f3d1180156145255760203d03806020883e8601604052614581565b7f08c379a000000000000000000000000000000000000000000000000000000000865260206004870152601e60248701527f45564d52554e5f4558454355544f525f494e56414c49445f52455455524e00006044870152606486fd5b50614590565b3d6000863e3d85fd5b50508573ffffffffffffffffffffffffffffffffffffffff167f5229a5dba83a54ae8cb5b51bdd6de9474cacbe9dd332f5185f3a4f4f2e3f4ad98b8b8660405180806020018060200180602001848103845287818151815260200191508051906020019080838360005b838110156146125781810151838201526020016145fa565b50505050905090810190601f16801561463f5780820380516001836020036101000a031916815260200191505b50848103835286518152865160209182019188019080838360005b8381101561467257818101518382015260200161465a565b50505050905090810190601f16801561469f5780820380516001836020036101000a031916815260200191505b50848103825285518152855160209182019187019080838360005b838110156146d25781810151838201526020016146ba565b50505050905090810190601f1680156146ff5780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390a28296508173ffffffffffffffffffffffffffffffffffffffff1661473261269a565b73ffffffffffffffffffffffffffffffffffffffff16146040805190810160405280601f81526020017f45564d52554e5f50524f5445435445445f53544154455f4d4f444946494544008152509015156147e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b50806147f2611830565b60408051808201909152601f81527f45564d52554e5f50524f5445435445445f53544154455f4d4f444946494544006020820152911461488e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b505050505050509392505050565b60006060600080600093508460060180548060200260200160405190810160405280929190818152602001828054801561490c57602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116148e1575b50505050509250600091505b8251821015614a4b57828281518110151561492f57fe5b602090810290910181015173ffffffffffffffffffffffffffffffffffffffff8116600090815260068352604090819020548151808301909252601982527f504159524f4c4c5f4e4f545f414c4c4f5745445f544f4b454e00000000000000938201939093529092509060ff161515614a04576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b5073ffffffffffffffffffffffffffffffffffffffff81166000908152600786016020526040902054614a3e90859063ffffffff61578c16565b9350600190910190614918565b60408051808201909152601d81527f504159524f4c4c5f444953545249425554494f4e5f4e4f545f46554c4c000000602082015260648514614ae9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b505050505050565b60408051808201909152601481527f504159524f4c4c5f4e4f5448494e475f504149440000000000000000000000006020820152600090818411614b91576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b5060408051808201909152601d81527f504159524f4c4c5f494e56414c49445f5245515545535445445f414d54000000602082015282841015614c30576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b50600082116121485782612693565b6002820154600080808080858711614c5e578686036002890155614dcc565b8694506000861115614c77576000600289015585870394505b60018801549350614c8e858563ffffffff6159a916565b92508385811515614c9b57fe5b0691506000821115614cc357614cb883600163ffffffff61578c16565b82850360028a015592505b6005880154614ce29067ffffffffffffffff168463ffffffff61578c16565b9050614cec613754565b60408051808201909152601981527f504159524f4c4c5f4c4153545f444154455f544f4f5f4249470000000000000060208201529067ffffffffffffffff16821115614d94576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b506005880180547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff83161790555b5050505050505050565b60408051808201909152601281527f4d4154485f5355425f554e444552464c4f5700000000000000000000000000006020820152600090819084841115614e79576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b505050900390565b6000808060608180808080808b1515614e9d5760009950615363565b60008e8152600460205260409020805490995073ffffffffffffffffffffffffffffffffffffffff169750614ed18d615a60565b9650886006019550600094505b8554851015615363578585815481101515614ef557fe5b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff1680835260078c019091526040909120549094509250821561535857614f3d84615b4c565b915060008b5111614f515760008211614f6d565b8a85815181101515614f5f57fe5b906020019060200201518210155b60408051808201909152601d81527f504159524f4c4c5f45584348414e47455f524154455f544f4f5f4c4f57000000602082015290151561500a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b5061502b8361501f8e8563ffffffff6156ca16565b9063ffffffff6156ca16565b90506150ff600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f40a04486040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1580156150b657600080fd5b505af11580156150ca573d6000803e3d6000fd5b505050506040513d60208110156150e057600080fd5b50516150f383606463ffffffff6159a916565b9063ffffffff6159a916565b90506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f6364846858a848b6040518563ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156152145781810151838201526020016151fc565b50505050905090810190601f1680156152415780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b15801561526357600080fd5b505af1158015615277573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff168f7fc517ef2ebef7336f05f233ebf372c7096b88120031a6cfd2e3b1bb7697ae7bf984868c6040518084815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156153175781810151838201526020016152ff565b50505050905090810190601f1680156153445780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a4600199505b600190940193614ede565b505050505050505050949350505050565b6000818152600460205260409020600581015467ffffffffffffffff80821668010000000000000000909204161480156153cb575060028101541580156153bd57506003810154155b80156153cb57506004810154155b1561547f57805473ffffffffffffffffffffffffffffffffffffffff166000908152600560208181526040808420849055858452600491829052832080547fffffffffffffffffffffffff000000000000000000000000000000000000000016815560018101849055600281018490556003810184905590810183905590810180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000169055906127f36006830182615d2c565b5050565b60606154a68473ffffffffffffffffffffffffffffffffffffffff1684846135ce565b949350505050565b600380546001810190915560006154c5828761376e565b506000818152600460209081526040808320600181018890556005810180547fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff67ffffffffffffffff8a167fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000009092168217166fffffffffffffffff00000000000000001790915582518981528085019190915260609281018381528751938201939093528651919473ffffffffffffffffffffffffffffffffffffffff8b169487947f3ffb58fcadedbe7d45e1447eaeeba102f5ac5bbd44b7b99eab1dff2772d07225948c948c948c9491939260808501928601918190849084905b838110156155d95781810151838201526020016155c1565b50505050905090810190601f1680156156065780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a3505050505050565b6000615627613754565b600583015467ffffffffffffffff9182166801000000000000000090910490911610159050919050565b60008061565d8361561d565b61568157600583015468010000000000000000900467ffffffffffffffff16615689565b615689613754565b600584015490915067ffffffffffffffff908116908216116156ae5760009150612148565b600583015467ffffffffffffffff908116820316915050919050565b6000808315156156dd57600091506111c6565b508282028284828115156156ed57fe5b60408051808201909152601181527f4d4154485f4d554c5f4f564552464c4f5700000000000000000000000000000060208201529291900414611f88576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b60408051808201909152601181527f4d4154485f4144445f4f564552464c4f5700000000000000000000000000000060208201526000908383019084821015611f88576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b4290565b60408051808201909152601581527f55494e5436345f4e554d4245525f544f4f5f4249470000000000000000000000602082015260009067ffffffffffffffff8311156158de576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b5090919050565b9055565b604080516001808252818301909252606091602080830190803883390190505090508181600081518110151561591b57fe5b60209081029091010152919050565b6000806000806040516020818751602089018a5afa9250600083111561594f57805191505b50909590945092505050565b6000806040516020818551602087016000895af1600081111561599f573d801561598c57602081146159955761599d565b6001935061599d565b600183511493505b505b5090949350505050565b60408051808201909152600d81527f4d4154485f4449565f5a45524f0000000000000000000000000000000000000060208201526000908190818411615a4b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b508284811515615a5757fe5b04949350505050565b60606000826002811115615a7057fe5b1415615ab0575060408051808201909152600f81527f456d706c6f7965652073616c617279000000000000000000000000000000000060208201526112d6565b6001826002811115615abe57fe5b1415615afe575060408051808201909152601681527f456d706c6f796565207265696d62757273656d656e740000000000000000000060208201526112d6565b6002826002811115615b0c57fe5b1415612b64575060408051808201909152600e81527f456d706c6f79656520626f6e757300000000000000000000000000000000000060208201526112d6565b600254600154604080517fd81e842300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9283166004820152848316602482015281516000948594859491169263d81e8423926044808301939282900301818787803b158015615bcc57600080fd5b505af1158015615be0573d6000803e3d6000fd5b505050506040513d6040811015615bf657600080fd5b508051602090910151600254919350915074010000000000000000000000000000000000000000900467ffffffffffffffff16615c4b82615c35613754565b67ffffffffffffffff169063ffffffff615c7c16565b67ffffffffffffffff1610615c6357600092506140f7565b506fffffffffffffffffffffffffffffffff1692915050565b60408051808201909152601481527f4d41544836345f5355425f554e444552464c4f570000000000000000000000006020820152600090819067ffffffffffffffff8086169085161115614e79576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b5080546000825590600052602060002090810190615d4a9190615d4d565b50565b6113b791905b80821115610a085760008155600101615d535600a165627a7a72305820e76396dad752a5c27e5e1f8ac691c96983529f6aac0e7e73ddb2e87e42f2c14e0029ebb05b386a8d34882b8711d156f463690983dc47815980fb82aeeff1aa43579e",
  "deployedBytecode": "0x6080604052600436106102195763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416630803fac0811461021e5780630a0c75aa146102475780631216906b146102645780631bb440b1146102925780631bfe5f61146102b95780632350a84d146102ce57806327e02676146102f35780632914b9bd146103245780632ee235ef146103a6578063313b7b19146103bb57806332f0a3b5146103d057806335285a0f146103e557806337a7b7d8146103fa5780633fe3f1cf1461040f578063456fbfea146104565780634fd52f421461046b578063595da7291461048d5780637100650e146104a2578063724e78da146104b75780637e7db6e1146104e557806380afdea81461051357806388ea9247146105285780638aaa22841461053d5780638b3dd749146105705780639d4941d814610585578063a1658fad146105b3578063a479e50814610627578063a52e605f1461063c578063b02b69d614610654578063b7cafcc81461066f578063bca9a5c51461068a578063bef80ce11461077b578063bf510ff4146107ad578063c0774df3146107c2578063d4aae0c414610836578063d948d4681461084b578063dcb33f3e146108a4578063de4796ed146108cf578063ea199a83146108e4578063f6b9fdfb14610930578063f9eaee0d14610945578063fd64eccb14610973578063fe2fdf0b14610988578063ffd5acad146109b4575b600080fd5b34801561022a57600080fd5b506102336109e2565b604080519115158252519081900360200190f35b34801561025357600080fd5b50610262600435602435610a0c565b005b34801561027057600080fd5b5061026273ffffffffffffffffffffffffffffffffffffffff60043516610c8e565b34801561029e57600080fd5b506102a7610f25565b60408051918252519081900360200190f35b3480156102c557600080fd5b506102a7610f49565b3480156102da57600080fd5b5061026260043567ffffffffffffffff60243516610f4f565b3480156102ff57600080fd5b506102a760043573ffffffffffffffffffffffffffffffffffffffff602435166110e6565b34801561033057600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261037d9436949293602493928401919081908401838280828437509497506111cd9650505050505050565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b3480156103b257600080fd5b506102a76112db565b3480156103c757600080fd5b5061037d6112ff565b3480156103dc57600080fd5b5061037d61131b565b3480156103f157600080fd5b506102a76113ba565b34801561040657600080fd5b5061037d6113de565b34801561041b57600080fd5b5061026273ffffffffffffffffffffffffffffffffffffffff6004358116906024358116906044351667ffffffffffffffff606435166113fa565b34801561046257600080fd5b506102a76115c0565b34801561047757600080fd5b5061026267ffffffffffffffff600435166115e4565b34801561049957600080fd5b506102a76116ea565b3480156104ae57600080fd5b506102a761170e565b3480156104c357600080fd5b5061026273ffffffffffffffffffffffffffffffffffffffff60043516611732565b3480156104f157600080fd5b5061023373ffffffffffffffffffffffffffffffffffffffff6004351661182a565b34801561051f57600080fd5b506102a7611830565b34801561053457600080fd5b506102a7611860565b34801561054957600080fd5b5061026273ffffffffffffffffffffffffffffffffffffffff600435166024351515611884565b34801561057c57600080fd5b506102a7611ab3565b34801561059157600080fd5b5061026273ffffffffffffffffffffffffffffffffffffffff60043516611ade565b3480156105bf57600080fd5b50604080516020600460443581810135838102808601850190965280855261023395833573ffffffffffffffffffffffffffffffffffffffff16956024803596369695606495939492019291829185019084908082843750949750611e009650505050505050565b34801561063357600080fd5b5061037d611f90565b34801561064857600080fd5b506102a7600435612084565b34801561066057600080fd5b5061026260043560243561214e565b34801561067b57600080fd5b506102626004356024356122d4565b34801561069657600080fd5b506106a260043561245a565b604051808973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018881526020018781526020018681526020018581526020018467ffffffffffffffff1667ffffffffffffffff1681526020018367ffffffffffffffff1667ffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019060200280838360005b83811015610760578181015183820152602001610748565b50505050905001995050505050505050505060405180910390f35b34801561078757600080fd5b50610790612618565b6040805167ffffffffffffffff9092168252519081900360200190f35b3480156107b957600080fd5b506102a7612640565b3480156107ce57600080fd5b5060408051602060046024803582810135601f810185900485028601850190965285855261023395833573ffffffffffffffffffffffffffffffffffffffff169536956044949193909101919081908401838280828437509497506126649650505050505050565b34801561084257600080fd5b5061037d61269a565b34801561085757600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526102629436949293602493928401919081908401838280828437509497506126c59650505050505050565b3480156108b057600080fd5b506102626004803560ff169060248035916044359182019101356127f9565b3480156108db57600080fd5b50610233612d15565b3480156108f057600080fd5b506102626004803573ffffffffffffffffffffffffffffffffffffffff1690602480359160443567ffffffffffffffff1691606435908101910135612d46565b34801561093c57600080fd5b5061037d612e6a565b34801561095157600080fd5b5061023373ffffffffffffffffffffffffffffffffffffffff60043516612e86565b34801561097f57600080fd5b50610233612f5a565b34801561099457600080fd5b506102626024600480358281019290820135918135918201910135612f5f565b3480156109c057600080fd5b506102a773ffffffffffffffffffffffffffffffffffffffff600435166134da565b6000806109ed611ab3565b90508015801590610a05575080610a026135ca565b10155b91505b5090565b60008281526004602052604081206001015481907fea9ac65018da2421cf419ee2152371440c08267a193a33ccc1e39545d197e44d90610a4f90869086906135ce565b610a5a338383611e00565b60408051808201909152600f81527f4150505f415554485f4641494c454400000000000000000000000000000000006020820152901515610b33576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610af8578181015183820152602001610ae0565b50505050905090810190601f168015610b255780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5085610b3e81613647565b60408051808201909152601b81527f504159524f4c4c5f4e4f4e5f4143544956455f454d504c4f59454500000000006020820152901515610bdb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b5060008781526004602052604081209550610bf7908690613664565b9350610c0387856136f1565b610c0b613754565b60058601805467ffffffffffffffff929092167fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000009092169190911790556001850186905560408051878152905188917fec4f21c1230ce7d88517d17b1f8ae85725a029dc2066fe2ed6401f1b01024e05919081900360200190a250505050505050565b33600081815260056020908152604080832054835260048252808320548151808301909252601d82527f504159524f4c4c5f53454e4445525f444f45535f4e4f545f4d4154434800000092820192909252919283929173ffffffffffffffffffffffffffffffffffffffff1614610d61576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b50610d8b7fe855346402235fdd185c890e68d2c4ecad599b88587635ee285bce2fda58dacb613766565b60408051808201909152601981527f5245454e5452414e43595f5245454e5452414e545f43414c4c0000000000000060208201529015610e27576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b50610e597fe855346402235fdd185c890e68d2c4ecad599b88587635ee285bce2fda58dacb600163ffffffff61376a16565b50503360009081526005602090815260408083205480845260049092529091205473ffffffffffffffffffffffffffffffffffffffff16610e9a828461376e565b73ffffffffffffffffffffffffffffffffffffffff80821660008181526005602052604080822082905551919286169185917f5a3949ffa1f5851afea532ad9d4c7dfb51bf68f7d5964ff77f3bb4c0abedbbe491a4610f207fe855346402235fdd185c890e68d2c4ecad599b88587635ee285bce2fda58dacb600063ffffffff61376a16565b505050565b7f0be34987c45700ee3fae8c55e270418ba903337decc6bacb1879504be9331c0681565b60035481565b7f69c67f914d12b6440e7ddf01961214818d9158fbcb19211e0ff42800fdea9242610f848367ffffffffffffffff8416613946565b610f8f338383611e00565b60408051808201909152600f81527f4150505f415554485f4641494c45440000000000000000000000000000000000602082015290151561102c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b508361103781613647565b60408051808201909152601b81527f504159524f4c4c5f4e4f4e5f4143544956455f454d504c4f594545000000000060208201529015156110d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b506110df85856139a1565b5050505050565b6000826110f281613ae4565b60408051808201909152601d81527f504159524f4c4c5f454d504c4f5945455f444f45534e545f4558495354000000602082015290151561118f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b50600084815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845260070190915290205491505b5092915050565b60006111d7611f90565b73ffffffffffffffffffffffffffffffffffffffff166304bf2a7f836040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561125b578181015183820152602001611243565b50505050905090810190601f1680156112885780820380516001836020036101000a031916815260200191505b5092505050602060405180830381600087803b1580156112a757600080fd5b505af11580156112bb573d6000803e3d6000fd5b505050506040513d60208110156112d157600080fd5b505190505b919050565b7f79fe989a8899060dfbdabb174ebb96616fa9f1d9dadd739f8d814cbab452404e81565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b600061132561269a565b73ffffffffffffffffffffffffffffffffffffffff166332f0a3b56040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561138857600080fd5b505af115801561139c573d6000803e3d6000fd5b505050506040513d60208110156113b257600080fd5b505190505b90565b7fceca7e2f5eb749a87aaf68f3f76d6b9251aa2f4600f13f93c5a4adf7a72df4ae81565b60025473ffffffffffffffffffffffffffffffffffffffff1681565b611402611ab3565b60408051808201909152601881527f494e49545f414c52454144595f494e495449414c495a454400000000000000006020820152901561149e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b506114a7613b0e565b6114b084613bed565b60408051808201909152601c81527f504159524f4c4c5f46494e414e43455f4e4f545f434f4e545241435400000000602082015290151561154d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b506000805473ffffffffffffffffffffffffffffffffffffffff8087167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560018054928616929091169190911790556115ac82613c20565b6115b581613d3c565b505060016003555050565b7fea9ac65018da2421cf419ee2152371440c08267a193a33ccc1e39545d197e44d81565b6002547f79fe989a8899060dfbdabb174ebb96616fa9f1d9dadd739f8d814cbab452404e906116389067ffffffffffffffff8085169174010000000000000000000000000000000000000000900416613946565b611643338383611e00565b60408051808201909152600f81527f4150505f415554485f4641494c4544000000000000000000000000000000000060208201529015156116e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b50610f2083613d3c565b7f74350efbcba8b85341c5bbf70cc34e2a585fc1463524773a12fa0a71d4eb930281565b7f69c67f914d12b6440e7ddf01961214818d9158fbcb19211e0ff42800fdea924281565b6002547f74350efbcba8b85341c5bbf70cc34e2a585fc1463524773a12fa0a71d4eb93029061177890839073ffffffffffffffffffffffffffffffffffffffff16613e75565b611783338383611e00565b60408051808201909152600f81527f4150505f415554485f4641494c454400000000000000000000000000000000006020820152901515611820576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b50610f2083613c20565b50600190565b600061185b7fd625496217aa6a3453eecb9c3489dc5a53e6c67b444329ea2b2cbc9ff547639b613766565b905090565b7f90698b9d54427f1e41636025017309bdb1b55320da960c8845bab0a504b01a1681565b7f0be34987c45700ee3fae8c55e270418ba903337decc6bacb1879504be9331c066118ae83613ead565b6118b9338383611e00565b60408051808201909152600f81527f4150505f415554485f4641494c454400000000000000000000000000000000006020820152901515611956576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b5073ffffffffffffffffffffffffffffffffffffffff8416600090815260066020908152604091829020548251808401909352601983527f504159524f4c4c5f544f4b454e5f414c52454144595f534554000000000000009183019190915260ff1615158415151415611a25576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b5073ffffffffffffffffffffffffffffffffffffffff841660008181526006602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016871515908117909155825190815291517fe589eb036e62c07e307aa4d441bd39c81e8bd86f349eaacb0caa06b1477f7f9a9281900390910190a250505050565b600061185b7febb05b386a8d34882b8711d156f463690983dc47815980fb82aeeff1aa43579e613766565b6000806000611aec8461182a565b60408051808201909152601281527f5245434f5645525f444953414c4c4f57454400000000000000000000000000006020820152901515611b89576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b50611b9261131b565b9250611b9d83613bed565b60408051808201909152601a81527f5245434f5645525f5641554c545f4e4f545f434f4e54524143540000000000006020820152901515611c3a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b5073ffffffffffffffffffffffffffffffffffffffff84161515611ca5576040513031925073ffffffffffffffffffffffffffffffffffffffff84169083156108fc029084906000818181858888f19350505050158015611c9f573d6000803e3d6000fd5b50611d95565b5082611ccd73ffffffffffffffffffffffffffffffffffffffff82163063ffffffff613ed216565b9150611cf673ffffffffffffffffffffffffffffffffffffffff8216848463ffffffff61400b16565b60408051808201909152601d81527f5245434f5645525f544f4b454e5f5452414e534645525f4641494c45440000006020820152901515611d93576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b505b8373ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f596caf56044b55fb8c4ca640089bbc2b63cae3e978b851f5745cbb7c5b288e02846040518082815260200191505060405180910390a350505050565b600080611e0b6109e2565b1515611e1a5760009150611f88565b611e2261269a565b905073ffffffffffffffffffffffffffffffffffffffff81161515611e4a5760009150611f88565b8073ffffffffffffffffffffffffffffffffffffffff1663fdef9106863087611e72886140a3565b6040517c010000000000000000000000000000000000000000000000000000000063ffffffff871602815273ffffffffffffffffffffffffffffffffffffffff808616600483019081529085166024830152604482018490526080606483019081528351608484015283519192909160a490910190602085019080838360005b83811015611f0a578181015183820152602001611ef2565b50505050905090810190601f168015611f375780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b158015611f5957600080fd5b505af1158015611f6d573d6000803e3d6000fd5b505050506040513d6020811015611f8357600080fd5b505191505b509392505050565b600080611f9b61269a565b604080517fbe00bbd80000000000000000000000000000000000000000000000000000000081527fd6f028ca0e8edb4a8c9757ca4fdccab25fa1e0317da1188108f7d2dee14902fb60048201527fddbcfd564f642ab5627cf68b9b7d374fb4f8a36e941a75d89c87998cef03bd616024820152905173ffffffffffffffffffffffffffffffffffffffff929092169163be00bbd8916044808201926020929091908290030181600087803b15801561205257600080fd5b505af1158015612066573d6000803e3d6000fd5b505050506040513d602081101561207c57600080fd5b505192915050565b60008161209081613ae4565b60408051808201909152601d81527f504159524f4c4c5f454d504c4f5945455f444f45534e545f4558495354000000602082015290151561212d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b506000838152600460205260409020612145906140ad565b91505b50919050565b7fceca7e2f5eb749a87aaf68f3f76d6b9251aa2f4600f13f93c5a4adf7a72df4ae6121798383613946565b612184338383611e00565b60408051808201909152600f81527f4150505f415554485f4641494c454400000000000000000000000000000000006020820152901515612221576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b508361222c81613647565b60408051808201909152601b81527f504159524f4c4c5f4e4f4e5f4143544956455f454d504c4f594545000000000060208201529015156122c9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b506110df85856140fe565b7f90698b9d54427f1e41636025017309bdb1b55320da960c8845bab0a504b01a166122ff8383613946565b61230a338383611e00565b60408051808201909152600f81527f4150505f415554485f4641494c4544000000000000000000000000000000000060208201529015156123a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b50836123b281613647565b60408051808201909152601b81527f504159524f4c4c5f4e4f4e5f4143544956455f454d504c4f5945450000000000602082015290151561244f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b506110df8585614161565b6000806000806000806000606060008961247381613ae4565b60408051808201909152601d81527f504159524f4c4c5f454d504c4f5945455f444f45534e545f45584953540000006020820152901515612510576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b50600460008c815260200190815260200160002091508160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169950816001015498508160020154975081600301549650816004015495508160050160009054906101000a900467ffffffffffffffff1694508160050160089054906101000a900467ffffffffffffffff1693508160060180548060200260200160405190810160405280929190818152602001828054801561260457602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116125d9575b505050505092505050919395975091939597565b60025474010000000000000000000000000000000000000000900467ffffffffffffffff1681565b7f9ecdc3c63716b45d0756eece5fe1614cae1889ec5a1ce62b3127c1f1f1615d6e81565b73ffffffffffffffffffffffffffffffffffffffff821660009081526005602052604081205461269390613647565b9392505050565b600061185b7f4172f0f7d2289153072b0a6ca36959e0cbe2efc3afe50fc81636caa96338137b613766565b6060806126d23384612664565b60408051808201909152601781527f504159524f4c4c5f43414e5f4e4f545f464f5257415244000000000000000000602082015290151561276f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b50604080516000815260016020808301828152606084018552929550919290919085019080388339505060008054835193945073ffffffffffffffffffffffffffffffffffffffff169284925081106127c457fe5b73ffffffffffffffffffffffffffffffffffffffff9092166020928302909101909101526127f38383836141c6565b50505050565b33600081815260056020908152604080832054835260048252808320548151808301909252601d82527f504159524f4c4c5f53454e4445525f444f45535f4e4f545f4d4154434800000092820192909252919283928392839283928392909173ffffffffffffffffffffffffffffffffffffffff909116146128d7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b506129017fe855346402235fdd185c890e68d2c4ecad599b88587635ee285bce2fda58dacb613766565b60408051808201909152601981527f5245454e5452414e43595f5245454e5452414e545f43414c4c000000000000006020820152901561299d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b506129cf7fe855346402235fdd185c890e68d2c4ecad599b88587635ee285bce2fda58dacb600163ffffffff61376a16565b33600090815260056020908152604080832054808452600490925290912090955093506129fb8461489c565b861580612a0b5750600684015487145b60408051808201909152601a81527f504159524f4c4c5f4d494e5f52415445535f4d49534d415443480000000000006020820152901515612aa8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b5060008a6002811115612ab757fe5b1415612ae357612ac6846140ad565b9250612ad2838a614af1565b9550612ade8487614c3f565b612bf8565b60018a6002811115612af157fe5b1415612b245783600401549150612b08828a614af1565b9550612b1a828763ffffffff614dd616565b6004850155612bf8565b60028a6002811115612b3257fe5b1415612b6457506003830154612b48818a614af1565b9550612b5a818763ffffffff614dd616565b6003850155612bf8565b604080518082018252601c81527f504159524f4c4c5f494e56414c49445f5041594d454e545f5459504500000000602080830191825292517f08c379a000000000000000000000000000000000000000000000000000000000815260048101938452825160248201528251929392839260449092019190808383600083811015610af8578181015183820152602001610ae0565b612c31858b888b8b8080602002602001604051908101604052809392919081815260200183836020028082843750614e81945050505050565b60408051808201909152601481527f504159524f4c4c5f4e4f5448494e475f504149440000000000000000000000006020820152901515612cce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b50612cd885615374565b612d097fe855346402235fdd185c890e68d2c4ecad599b88587635ee285bce2fda58dacb600063ffffffff61376a16565b50505050505050505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff612d40611ab3565b14905090565b7f9ecdc3c63716b45d0756eece5fe1614cae1889ec5a1ce62b3127c1f1f1615d6e612d7c868667ffffffffffffffff8716615483565b612d87338383611e00565b60408051808201909152600f81527f4150505f415554485f4641494c454400000000000000000000000000000000006020820152901515612e24576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b50612e6187878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437506154ae945050505050565b50505050505050565b60015473ffffffffffffffffffffffffffffffffffffffff1681565b6000612e906109e2565b60408051808201909152601481527f494e49545f4e4f545f494e495449414c495a45440000000000000000000000006020820152901515612f2d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b505073ffffffffffffffffffffffffffffffffffffffff1660009081526006602052604090205460ff1690565b600190565b33600081815260056020908152604080832054835260048252808320548151808301909252601d82527f504159524f4c4c5f53454e4445525f444f45535f4e4f545f4d415443480000009282019290925291928392606092849283929173ffffffffffffffffffffffffffffffffffffffff1614613039576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b506130637fe855346402235fdd185c890e68d2c4ecad599b88587635ee285bce2fda58dacb613766565b60408051808201909152601981527f5245454e5452414e43595f5245454e5452414e545f43414c4c00000000000000602082015290156130ff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b506131317fe855346402235fdd185c890e68d2c4ecad599b88587635ee285bce2fda58dacb600163ffffffff61376a16565b60408051808201909152601a81527f504159524f4c4c5f4d41585f414c4c4f5745445f544f4b454e53000000000000602082015260148911156131d0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b5060408051606081018252602181527f504159524f4c4c5f544f4b454e5f414c4c4f434154494f4e5f4d49534d41544360208201527f480000000000000000000000000000000000000000000000000000000000000091810191909152888714613296576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b503360009081526005602090815260408083205480845260048352928190206006810180548351818602810186019094528084529499509097509092909183018282801561331a57602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116132ef575b50505050509250600091505b825182101561338057836007016000848481518110151561334357fe5b602090810290910181015173ffffffffffffffffffffffffffffffffffffffff168252810191909152604001600090812055600190910190613326565b61338e600685016000615d2c565b5060005b8781101561346a57600684018989838181106133aa57fe5b835460018101855560009485526020948590200180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff959092029390930135939093169290921790555086868281811061341757fe5b905060200201358460070160008b8b85818110151561343257fe5b6020908102929092013573ffffffffffffffffffffffffffffffffffffffff1683525081019190915260400160002055600101613392565b6134738461489c565b60405185907f2e68f13a32c51068abe241b8c7db891d265385114938311f83a31583b2a11d7a90600090a26134cf7fe855346402235fdd185c890e68d2c4ecad599b88587635ee285bce2fda58dacb600063ffffffff61376a16565b505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600560209081526040808320548151808301909252601d82527f504159524f4c4c5f454d504c4f5945455f444f45534e545f4558495354000000928201929092529015156135a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b505073ffffffffffffffffffffffffffffffffffffffff1660009081526005602052604090205490565b4390565b604080516003808252608082019092526060916020820183803883390190505090508381600081518110151561360057fe5b60209081029091010152805183908290600190811061361b57fe5b60209081029091010152805182908290600290811061363657fe5b602090810290910101529392505050565b600081815260046020526040812061365e9061561d565b92915050565b60008060008061367386615651565b925082151561368557600093506136e8565b8560010154915084156136d857508082028183828115156136a257fe5b0414156136af57806136d1565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b93506136e8565b6136d1828463ffffffff6156ca16565b50505092915050565b60008281526004602052604090206002810154613714908363ffffffff61578c16565b600282015560408051838152905184917f494c76e58dab1186acc63fd537885795bd237ae0feb2d4d3f6092ca77f594f83919081900360200190a2505050565b600061185b613761615831565b615835565b5490565b9055565b60408051808201909152601d81527f504159524f4c4c5f454d504c4f5945455f4e554c4c5f41444452455353000000602082015273ffffffffffffffffffffffffffffffffffffffff82161515613821576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b5073ffffffffffffffffffffffffffffffffffffffff8116600090815260056020908152604091829020548251808401909352601e83527f504159524f4c4c5f454d504c4f5945455f414c52454144595f4558495354000091830191909152156138e7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b506000828152600460209081526040808320805473ffffffffffffffffffffffffffffffffffffffff9095167fffffffffffffffffffffffff000000000000000000000000000000000000000090951685179055928252600590522055565b60408051600280825260608083018452926020830190803883390190505090508281600081518110151561397657fe5b60209081029091010152805182908290600190811061399157fe5b6020908102909101015292915050565b6139a9613754565b60408051808201909152601d81527f504159524f4c4c5f504153545f5445524d494e4154494f4e5f4441544500000060208201529067ffffffffffffffff9081169083161015613a55576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b5060008281526004602090815260409182902060050180547fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff166801000000000000000067ffffffffffffffff8616908102919091179091558251908152915184927f64eed8d28fe1c502b235bba967ed50243ed5fbda55daa5388ede25613185f8af92908290030190a25050565b60009081526004602052604090205473ffffffffffffffffffffffffffffffffffffffff16151590565b613b16611ab3565b60408051808201909152601881527f494e49545f414c52454144595f494e495449414c495a4544000000000000000060208201529015613bb2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b50613beb613bbe6135ca565b7febb05b386a8d34882b8711d156f463690983dc47815980fb82aeeff1aa43579e9063ffffffff61376a16565b565b60008073ffffffffffffffffffffffffffffffffffffffff83161515613c165760009150612148565b50506000903b1190565b613c2981613bed565b60408051808201909152601981527f504159524f4c4c5f464545445f4e4f545f434f4e5452414354000000000000006020820152901515613cc6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b50600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691909117918290556040519116907ff724a45d041687842411f2b977ef22ab8f43c8f1104f4592b42a00f9b34a643d90600090a250565b60408051808201909152601d81527f504159524f4c4c5f4558504952595f54494d455f544f4f5f53484f52540000006020820152603c67ffffffffffffffff83161015613de5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b506002805467ffffffffffffffff808416740100000000000000000000000000000000000000009081027fffffffff0000000000000000ffffffffffffffffffffffffffffffffffffffff9093169290921792839055604080519290930416815290517f79f849dfd7cf0efc92191ac811c877afb4d27891c560189c77117e755b103a3e9181900360200190a150565b60606126938373ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16613946565b606061365e8273ffffffffffffffffffffffffffffffffffffffff166158e9565b5490565b6040805173ffffffffffffffffffffffffffffffffffffffff83166024808301919091528251808303909101815260449091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f70a08231000000000000000000000000000000000000000000000000000000001790526000908180613f5f868461592a565b60408051808201909152601c81527f534146455f4552435f32305f42414c414e43455f52455645525445440000000060208201529193509150821515614001576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b5095945050505050565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260009061409a858261595b565b95945050505050565b8051602002815290565b60008060006140bd846001613664565b9150836002015482019050818110156140f357507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b8092505b5050919050565b60008281526004602052604090206003810154614121908363ffffffff61578c16565b600382015560408051838152905184917f02eaf727c9cb2b9ae1c0d973092bfa6431d79978bf1db9f57ec4279a8c1eb85a919081900360200190a2505050565b600082815260046020819052604090912090810154614186908363ffffffff61578c16565b600482015560408051838152905184917f594fd22b20a17265cf2b4459acd7f1b6fa11f6a0046fa052bba6ef7f1ee95392919081900360200190a2505050565b60606000806060806141d66109e2565b60408051808201909152601481527f494e49545f4e4f545f494e495449414c495a45440000000000000000000000006020820152901515614273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b5060008061427f61269a565b9150614289611830565b90506142948a6111cd565b60408051808201909152601b81527f45564d52554e5f4558454355544f525f554e415641494c41424c450000000000602082015290965073ffffffffffffffffffffffffffffffffffffffff8716151561434a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b506040516060602482019081528b5160848301528b517f279cea3500000000000000000000000000000000000000000000000000000000975087928d928d928d9282916044820191606481019160a490910190602089019080838360005b838110156143c05781810151838201526020016143a8565b50505050905090810190601f1680156143ed5780820380516001836020036101000a031916815260200191505b50848103835286518152865160209182019188019080838360005b83811015614420578181015183820152602001614408565b50505050905090810190601f16801561444d5780820380516001836020036101000a031916815260200191505b508481038252855181528551602091820191808801910280838360005b8381101561448257818101518382015260200161446a565b505050509050019650505050505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050509350600080855160208701895af4604051935080801561458757603f3d1180156145255760203d03806020883e8601604052614581565b7f08c379a000000000000000000000000000000000000000000000000000000000865260206004870152601e60248701527f45564d52554e5f4558454355544f525f494e56414c49445f52455455524e00006044870152606486fd5b50614590565b3d6000863e3d85fd5b50508573ffffffffffffffffffffffffffffffffffffffff167f5229a5dba83a54ae8cb5b51bdd6de9474cacbe9dd332f5185f3a4f4f2e3f4ad98b8b8660405180806020018060200180602001848103845287818151815260200191508051906020019080838360005b838110156146125781810151838201526020016145fa565b50505050905090810190601f16801561463f5780820380516001836020036101000a031916815260200191505b50848103835286518152865160209182019188019080838360005b8381101561467257818101518382015260200161465a565b50505050905090810190601f16801561469f5780820380516001836020036101000a031916815260200191505b50848103825285518152855160209182019187019080838360005b838110156146d25781810151838201526020016146ba565b50505050905090810190601f1680156146ff5780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390a28296508173ffffffffffffffffffffffffffffffffffffffff1661473261269a565b73ffffffffffffffffffffffffffffffffffffffff16146040805190810160405280601f81526020017f45564d52554e5f50524f5445435445445f53544154455f4d4f444946494544008152509015156147e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b50806147f2611830565b60408051808201909152601f81527f45564d52554e5f50524f5445435445445f53544154455f4d4f444946494544006020820152911461488e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b505050505050509392505050565b60006060600080600093508460060180548060200260200160405190810160405280929190818152602001828054801561490c57602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116148e1575b50505050509250600091505b8251821015614a4b57828281518110151561492f57fe5b602090810290910181015173ffffffffffffffffffffffffffffffffffffffff8116600090815260068352604090819020548151808301909252601982527f504159524f4c4c5f4e4f545f414c4c4f5745445f544f4b454e00000000000000938201939093529092509060ff161515614a04576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b5073ffffffffffffffffffffffffffffffffffffffff81166000908152600786016020526040902054614a3e90859063ffffffff61578c16565b9350600190910190614918565b60408051808201909152601d81527f504159524f4c4c5f444953545249425554494f4e5f4e4f545f46554c4c000000602082015260648514614ae9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b505050505050565b60408051808201909152601481527f504159524f4c4c5f4e4f5448494e475f504149440000000000000000000000006020820152600090818411614b91576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b5060408051808201909152601d81527f504159524f4c4c5f494e56414c49445f5245515545535445445f414d54000000602082015282841015614c30576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b50600082116121485782612693565b6002820154600080808080858711614c5e578686036002890155614dcc565b8694506000861115614c77576000600289015585870394505b60018801549350614c8e858563ffffffff6159a916565b92508385811515614c9b57fe5b0691506000821115614cc357614cb883600163ffffffff61578c16565b82850360028a015592505b6005880154614ce29067ffffffffffffffff168463ffffffff61578c16565b9050614cec613754565b60408051808201909152601981527f504159524f4c4c5f4c4153545f444154455f544f4f5f4249470000000000000060208201529067ffffffffffffffff16821115614d94576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b506005880180547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff83161790555b5050505050505050565b60408051808201909152601281527f4d4154485f5355425f554e444552464c4f5700000000000000000000000000006020820152600090819084841115614e79576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b505050900390565b6000808060608180808080808b1515614e9d5760009950615363565b60008e8152600460205260409020805490995073ffffffffffffffffffffffffffffffffffffffff169750614ed18d615a60565b9650886006019550600094505b8554851015615363578585815481101515614ef557fe5b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff1680835260078c019091526040909120549094509250821561535857614f3d84615b4c565b915060008b5111614f515760008211614f6d565b8a85815181101515614f5f57fe5b906020019060200201518210155b60408051808201909152601d81527f504159524f4c4c5f45584348414e47455f524154455f544f4f5f4c4f57000000602082015290151561500a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b5061502b8361501f8e8563ffffffff6156ca16565b9063ffffffff6156ca16565b90506150ff600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f40a04486040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1580156150b657600080fd5b505af11580156150ca573d6000803e3d6000fd5b505050506040513d60208110156150e057600080fd5b50516150f383606463ffffffff6159a916565b9063ffffffff6159a916565b90506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f6364846858a848b6040518563ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156152145781810151838201526020016151fc565b50505050905090810190601f1680156152415780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b15801561526357600080fd5b505af1158015615277573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff168f7fc517ef2ebef7336f05f233ebf372c7096b88120031a6cfd2e3b1bb7697ae7bf984868c6040518084815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156153175781810151838201526020016152ff565b50505050905090810190601f1680156153445780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a4600199505b600190940193614ede565b505050505050505050949350505050565b6000818152600460205260409020600581015467ffffffffffffffff80821668010000000000000000909204161480156153cb575060028101541580156153bd57506003810154155b80156153cb57506004810154155b1561547f57805473ffffffffffffffffffffffffffffffffffffffff166000908152600560208181526040808420849055858452600491829052832080547fffffffffffffffffffffffff000000000000000000000000000000000000000016815560018101849055600281018490556003810184905590810183905590810180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000169055906127f36006830182615d2c565b5050565b60606154a68473ffffffffffffffffffffffffffffffffffffffff1684846135ce565b949350505050565b600380546001810190915560006154c5828761376e565b506000818152600460209081526040808320600181018890556005810180547fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff67ffffffffffffffff8a167fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000009092168217166fffffffffffffffff00000000000000001790915582518981528085019190915260609281018381528751938201939093528651919473ffffffffffffffffffffffffffffffffffffffff8b169487947f3ffb58fcadedbe7d45e1447eaeeba102f5ac5bbd44b7b99eab1dff2772d07225948c948c948c9491939260808501928601918190849084905b838110156155d95781810151838201526020016155c1565b50505050905090810190601f1680156156065780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a3505050505050565b6000615627613754565b600583015467ffffffffffffffff9182166801000000000000000090910490911610159050919050565b60008061565d8361561d565b61568157600583015468010000000000000000900467ffffffffffffffff16615689565b615689613754565b600584015490915067ffffffffffffffff908116908216116156ae5760009150612148565b600583015467ffffffffffffffff908116820316915050919050565b6000808315156156dd57600091506111c6565b508282028284828115156156ed57fe5b60408051808201909152601181527f4d4154485f4d554c5f4f564552464c4f5700000000000000000000000000000060208201529291900414611f88576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b60408051808201909152601181527f4d4154485f4144445f4f564552464c4f5700000000000000000000000000000060208201526000908383019084821015611f88576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b4290565b60408051808201909152601581527f55494e5436345f4e554d4245525f544f4f5f4249470000000000000000000000602082015260009067ffffffffffffffff8311156158de576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b5090919050565b9055565b604080516001808252818301909252606091602080830190803883390190505090508181600081518110151561591b57fe5b60209081029091010152919050565b6000806000806040516020818751602089018a5afa9250600083111561594f57805191505b50909590945092505050565b6000806040516020818551602087016000895af1600081111561599f573d801561598c57602081146159955761599d565b6001935061599d565b600183511493505b505b5090949350505050565b60408051808201909152600d81527f4d4154485f4449565f5a45524f0000000000000000000000000000000000000060208201526000908190818411615a4b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b508284811515615a5757fe5b04949350505050565b60606000826002811115615a7057fe5b1415615ab0575060408051808201909152600f81527f456d706c6f7965652073616c617279000000000000000000000000000000000060208201526112d6565b6001826002811115615abe57fe5b1415615afe575060408051808201909152601681527f456d706c6f796565207265696d62757273656d656e740000000000000000000060208201526112d6565b6002826002811115615b0c57fe5b1415612b64575060408051808201909152600e81527f456d706c6f79656520626f6e757300000000000000000000000000000000000060208201526112d6565b600254600154604080517fd81e842300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9283166004820152848316602482015281516000948594859491169263d81e8423926044808301939282900301818787803b158015615bcc57600080fd5b505af1158015615be0573d6000803e3d6000fd5b505050506040513d6040811015615bf657600080fd5b508051602090910151600254919350915074010000000000000000000000000000000000000000900467ffffffffffffffff16615c4b82615c35613754565b67ffffffffffffffff169063ffffffff615c7c16565b67ffffffffffffffff1610615c6357600092506140f7565b506fffffffffffffffffffffffffffffffff1692915050565b60408051808201909152601481527f4d41544836345f5355425f554e444552464c4f570000000000000000000000006020820152600090819067ffffffffffffffff8086169085161115614e79576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b5080546000825590600052602060002090810190615d4a9190615d4d565b50565b6113b791905b80821115610a085760008155600101615d535600a165627a7a72305820e76396dad752a5c27e5e1f8ac691c96983529f6aac0e7e73ddb2e87e42f2c14e0029",
  "sourceMap": "508:39614:0:-;;;344:9:24;:7;;;;:9;:::i;:::-;508:39614:0;;590:84:34;615:24:32;:22;;;;:24;:::i;:::-;646:25;;;;;;;;;;;;;;;;;;615:29;607:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;607:65:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;637:30:34;-1:-1:-1;;637:13:34;;;;:30;:::i;:::-;590:84::o;881:137:32:-;936:7;962:49;-1:-1:-1;;;;;;;;;;;962:47:32;;;;;;:49;:::i;:::-;955:56;;881:137;:::o;1751:141::-;615:24;:22;;;;:24;:::i;:::-;646:25;;;;;;;;;;;;;;;;;;615:29;607:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;607:65:32;-1:-1:-1;1824:61:32;-1:-1:-1;;;;;;;;;;;1872:12:32;1824:47;;;;;;:61;:::i;:::-;1751:141;:::o;519:134:39:-;630:15;;620:27::o;1028:119::-;1117:22;;1115:26::o;508:39614:0:-;;;;;;;",
  "deployedSourceMap": "508:39614:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1128:208:32;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1128:208:32;;;;;;;;;;;;;;;;;;;;;;12342:770:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;12342:770:0;;;;;;;;;14017:550;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;14017:550:0;;;;;;;2022:119;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2022:119:0;;;;;;;;;;;;;;;;;;;;5360:27;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5360:27:0;;;;13314:256;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;13314:256:0;;;;;;;;;23033:191;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;23033:191:0;;;;;;;;;795:179:42;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;795:179:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;795:179:42;;-1:-1:-1;795:179:42;;-1:-1:-1;;;;;;;795:179:42;;;;;;;;;;;;;;;;;;;;2268:116:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2268:116:0;;;;5133:22;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5133:22:0;;;;2253:229:23;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2253:229:23;;;;1788:107:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1788:107:0;;;;5199:17;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5199:17:0;;;;8212:515;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;8212:515:0;;;;;;;;;;;;;;;;;;;;;1665:117;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1665:117:0;;;;9966:169;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;9966:169:0;;;;;;;2147:115;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2147:115:0;;;;1543:116;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1543:116:0;;;;9518:129;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;9518:129:0;;;;;;;1659:99:40;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1659:99:40;;;;;;;796:106:22;;8:9:-1;5:2;;;30:1;27;20:12;5:2;796:106:22;;;;1901:115:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1901:115:0;;;;9087:286;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;9087:286:0;;;;;;;;;;;881:137:32;;8:9:-1;5:2;;;30:1;27;20:12;5:2;881:137:32;;;;836:623:40;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;836:623:40;;;;;;;1641:496:23;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1641:496:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1641:496:23;;-1:-1:-1;1641:496:23;;-1:-1:-1;;;;;;;1641:496:23;980:231:42;;8:9:-1;5:2;;;30:1;27;20:12;5:2;980:231:42;;;;22584:182:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;22584:182:0;;;;;11196:218;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;11196:218:0;;;;;;;11655:242;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;11655:242:0;;;;;;;21376:866;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;21376:866:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;21376:866:0;;;;;;;;;;;;;;;;;;;;;;;;5222:28;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5222:28:0;;;;;;;;;;;;;;;;;;;;;;;1427:110;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1427:110:0;;;;20262:136;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;20262:136:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20262:136:0;;-1:-1:-1;20262:136:0;;-1:-1:-1;;;;;;;20262:136:0;674:116:22;;8:9:-1;5:2;;;30:1;27;20:12;5:2;674:116:22;;;;19438:542:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;19438:542:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19438:542:0;;-1:-1:-1;19438:542:0;;-1:-1:-1;;;;;;;19438:542:0;17049:1886;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;17049:1886:0;;;;;;;;;;;;;;;;;;;;;287:117:34;;8:9:-1;5:2;;;30:1;27;20:12;5:2;287:117:34;;;;10638:333:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;10638:333:0;;;;;;;;;;;;;;;;;;;;;;;;;;5161:32;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5161:32:0;;;;23433:126;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;23433:126:0;;;;;;;19106:80;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19106:80:0;;;;15112:1163;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;15112:1163:0;;;;;;;;;;;;;;;;;;;;;;;;20611:229;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;20611:229:0;;;;;;;1128:208:32;1175:4;1191:27;1221:24;:22;:24::i;:::-;1191:54;-1:-1:-1;1262:24:32;;;;;:67;;;1310:19;1290:16;:14;:16::i;:::-;:39;;1262:67;1255:74;;1128:208;;;:::o;12342:770:0:-;12613:25;12514:22;;;:9;:22;;;;;12450:24;12514:46;;12613:25;;1716:66;;12476:85;;12480:11;;12493:19;;12476:3;:85::i;:::-;1148:38:23;1159:10;1171:5;1178:7;1148:10;:38::i;:::-;1188:17;;;;;;;;;;;;;;;;;;1140:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;1140:66:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12586:11:0;7174:32;7194:11;7174:19;:32::i;:::-;7208:25;;;;;;;;;;;;;;;;;;7166:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;7166:68:0;-1:-1:-1;12641:22:0;;;;:9;:22;;;;;;-1:-1:-1;12763:47:0;;12641:22;;12763:30;:47::i;:::-;12748:62;;12820:36;12838:11;12851:4;12820:17;:36::i;:::-;12958:16;:14;:16::i;:::-;12935:20;;;:39;;;;;;;;;;;;;;;;;;12984:32;;:54;;;13054:51;;;;;;;;13072:11;;13054:51;;;;;;;;;;1216:1:23;12342:770:0;;;;;;:::o;14017:550::-;7403:10;14126:18;7360:23;;;:11;:23;;;;;;;;;7350:34;;:9;:34;;;;;:49;7415:27;;;;;;;;;;;;;;;;;;;14126:18;;;;7415:27;7350:63;:49;:63;7342:101;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;7342:101:0;-1:-1:-1;621:42:35;393:66;621:40;:42::i;:::-;665:15;;;;;;;;;;;;;;;;;;620:43;612:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;612:69:35;-1:-1:-1;735:46:35;393:66;776:4;735:46;:40;:46;:::i;:::-;-1:-1:-1;;14159:10:0;14147:23;;;;:11;:23;;;;;;;;;14201:21;;;:9;:21;;;;;;:36;14147:23;14201:36;14248:51;14147:23;14280:18;14248:19;:51::i;:::-;14454:23;;;;;;;;:11;:23;;;;;;14447:30;;;14493:67;14454:23;;14493:67;;;14517:10;;14493:67;;;881:47:35;393:66;922:5;881:47;:40;:47;:::i;:::-;14017:550:0;;;:::o;2022:119::-;2075:66;2022:119;:::o;5360:27::-;;;;:::o;13314:256::-;1593:66;13435:35;13439:11;13452:17;;;13435:3;:35::i;:::-;1148:38:23;1159:10;1171:5;1178:7;1148:10;:38::i;:::-;1188:17;;;;;;;;;;;;;;;;;;1140:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;1140:66:23;;13495:11:0;7174:32;7194:11;7174:19;:32::i;:::-;7208:25;;;;;;;;;;;;;;;;;;7166:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;7166:68:0;;13522:41;13541:11;13554:8;13522:18;:41::i;:::-;1216:1:23;13314:256:0;;;;:::o;23033:191::-;23144:7;23122:11;6877:28;6893:11;6877:15;:28::i;:::-;6907:27;;;;;;;;;;;;;;;;;;6869:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;6869:66:0;-1:-1:-1;23170:22:0;;;;:9;:22;;;;;;;;:47;;;;;:39;;:47;;;;;;;-1:-1:-1;6945:1:0;23033:191;;;;;:::o;795:179:42:-;861:18;917:22;:20;:22::i;:::-;:40;;;958:7;917:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;917:49:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;917:49:42;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;917:49:42;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;917:49:42;;-1:-1:-1;795:179:42;;;;:::o;2268:116:0:-;2318:66;2268:116;:::o;5133:22::-;;;;;;:::o;2253:229:23:-;2302:7;2408:8;:6;:8::i;:::-;:25;;;:27;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2408:27:23;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2408:27:23;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2408:27:23;;-1:-1:-1;2253:229:23;;:::o;1788:107:0:-;1829:66;1788:107;:::o;5199:17::-;;;;;;:::o;8212:515::-;615:24:32;:22;:24::i;:::-;646:25;;;;;;;;;;;;;;;;;;615:29;607:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;607:65:32;;8348:13:0;:11;:13::i;:::-;8380:20;8391:8;8380:10;:20::i;:::-;8402:26;;;;;;;;;;;;;;;;;;8372:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;8372:57:0;-1:-1:-1;8439:7:0;:18;;;;;;;;;;;;;;;8468:38;;;;;;;;;;;;;;;8516:25;8530:10;8516:13;:25::i;:::-;8551:35;8570:15;8551:18;:35::i;:::-;-1:-1:-1;;8719:1:0;8704:12;:16;-1:-1:-1;;8212:515:0:o;1665:117::-;1716:66;1665:117;:::o;9966:169::-;10075:14;;2318:66;;10047:44;;10051:14;;;;;10075;;;;10047:3;:44::i;:::-;1148:38:23;1159:10;1171:5;1178:7;1148:10;:38::i;:::-;1188:17;;;;;;;;;;;;;;;;;;1140:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;1140:66:23;;10103:25:0;10122:5;10103:18;:25::i;2147:115::-;2196:66;2147:115;:::o;1543:116::-;1593:66;1543:116;:::o;9518:129::-;9603:4;;2196:66;;9592:16;;9596:5;;9603:4;;9592:3;:16::i;:::-;1148:38:23;1159:10;1171:5;1178:7;1148:10;:38::i;:::-;1188:17;;;;;;;;;;;;;;;;;;1140:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;1140:66:23;;9620:20:0;9634:5;9620:13;:20::i;1659:99:40:-;-1:-1:-1;1747:4:40;;1659:99::o;796:106:22:-;834:7;860:35;601:66;860:33;:35::i;:::-;853:42;;796:106;:::o;1901:115:0:-;1950:66;1901:115;:::o;9087:286::-;2075:66;9186:11;9190:6;9186:3;:11::i;:::-;1148:38:23;1159:10;1171:5;1178:7;1148:10;:38::i;:::-;1188:17;;;;;;;;;;;;;;;;;;1140:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;1140:66:23;-1:-1:-1;9217:21:0;;;;;;;:13;:21;;;;;;;;;;9252:23;;;;;;;;;;;;;;;;;;;9217:21;;:33;;;;;;;9209:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;9209:67:0;-1:-1:-1;9286:21:0;;;;;;;:13;:21;;;;;;;;;:32;;;;;;;;;;;;;9333:33;;;;;;;;;;;;;;;;;9087:286;;;;:::o;881:137:32:-;936:7;962:49;345:66;962:47;:49::i;836:623:40:-;960:13;1067:15;1224:11;904:27;924:6;904:19;:27::i;:::-;933:16;;;;;;;;;;;;;;;;;;896:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;896:54:40;;976:18;:16;:18::i;:::-;960:34;;1012:17;1023:5;1012:10;:17::i;:::-;1031:24;;;;;;;;;;;;;;;;;;1004:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;1004:52:40;-1:-1:-1;1096:13:40;;;;1092:307;;;1170:23;;1143:4;1135:21;;-1:-1:-1;1135:21:40;1170:14;;;:23;;;;;1135:21;;1170:23;;;;1135:21;1170:14;:23;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1170:23:40;1092:307;;;-1:-1:-1;1244:6:40;1275:27;:21;;;1297:4;1275:27;:21;:27;:::i;:::-;1265:37;-1:-1:-1;1324:34:40;:18;;;1343:5;1265:37;1324:34;:18;:34;:::i;:::-;1360:27;;;;;;;;;;;;;;;;;;1316: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;;1316:72:40;;1092:307;1436:6;1414:38;;1429:5;1414:38;;;1444:7;1414:38;;;;;;;;;;;;;;;;;;836:623;;;;:::o;1641:496:23:-;1733:4;1819:20;1754:16;:14;:16::i;:::-;1753:17;1749:60;;;1793:5;1786:12;;;;1749:60;1842:8;:6;:8::i;:::-;1819:31;-1:-1:-1;1864:35:23;;;;1860:78;;;1922:5;1915:12;;;;1860:78;1955:12;:26;;;1995:7;2024:4;2043:5;2062:58;2112:7;2062:49;:58::i;:::-;1955:175;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-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;1955:175:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1955:175:23;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1955:175:23;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1955:175:23;;-1:-1:-1;1641:496:23;;;;;;;:::o;980:231:42:-;1033:18;1063:20;1086:8;:6;:8::i;:::-;:69;;;;;;1368:66:53;1086:69:42;;;;330:66:44;1086:69:42;;;;;;:15;;;;;;;;:69;;;;;;;;;;;;;;;;:15;:69;;;5:2:-1;;;;30:1;27;20:12;5:2;1086:69:42;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1086:69:42;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1086:69:42;;980:231;-1:-1:-1;;980:231:42:o;22584:182:0:-;22684:7;22662:11;6877:28;6893:11;6877:15;:28::i;:::-;6907:27;;;;;;;;;;;;;;;;;;6869:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;6869:66:0;-1:-1:-1;22736:22:0;;;;:9;:22;;;;;22710:49;;:25;:49::i;:::-;22703:56;;6945:1;22584:182;;;;:::o;11196:218::-;1829:66;11299:25;11303:11;11316:7;11299:3;:25::i;:::-;1148:38:23;1159:10;1171:5;1178:7;1148:10;:38::i;:::-;1188:17;;;;;;;;;;;;;;;;;;1140:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;1140:66:23;;11349:11:0;7174:32;7194:11;7174:19;:32::i;:::-;7208:25;;;;;;;;;;;;;;;;;;7166:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;7166:68:0;;11376:31;11386:11;11399:7;11376:9;:31::i;11655:242::-;1950:66;11774:25;11778:11;11791:7;11774:3;:25::i;:::-;1148:38:23;1159:10;1171:5;1178:7;1148:10;:38::i;:::-;1188:17;;;;;;;;;;;;;;;;;;1140:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;1140:66:23;;11824:11:0;7174:32;7194:11;7174:19;:32::i;:::-;7208:25;;;;;;;;;;;;;;;;;;7166:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;7166:68:0;;11851:39;11869:11;11882:7;11851:17;:39::i;21376:866::-;21514:22;21550:26;21590:21;21625:13;21652:22;21688:18;21720:14;21748:26;21799:25;21471:11;6877:28;6893:11;6877:15;:28::i;:::-;6907:27;;;;;;;;;;;;;;;;;;6869:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;6869:66:0;;21827:9;:22;21837:11;21827:22;;;;;;;;;;;21799:50;;21877:8;:23;;;;;;;;;;;;21860:40;;21931:8;:32;;;21910:53;;21989:8;:22;;;21973:38;;22029:8;:14;;;22021:22;;22070:8;:23;;;22053:40;;22117:8;:20;;;;;;;;;;;;22103:34;;22157:8;:16;;;;;;;;;;;;22147:26;;22202:8;:33;;22183:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21376:866;;;;;;;;;;;:::o;5222:28::-;;;;;;;;;:::o;1427:110::-;1471:66;1427:110;:::o;20262:136::-;20370:20;;;20327:4;20370:20;;;:11;:20;;;;;;20350:41;;:19;:41::i;:::-;20343:48;20262:136;-1:-1:-1;;;20262:136:0:o;674:116:22:-;713:7;747:35;485:66;747:33;:35::i;19438:542:0:-;19566:18;19837:26;19498:34;19509:10;19521;19498;:34::i;:::-;19534:21;;;;;;;;;;;;;;;;;;19490:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;19490:66:0;-1:-1:-1;19587:12:0;;;19597:1;19587:12;;19880:1;19587:12;;;;19866:16;;;;;;;;19587:12;;-1:-1:-1;19587:12:0;;19880:1;;19866:16;;;;19587:12;105:10:-1;19866:16:0;88:34:-1;-1:-1;;19915:7:0;;;19892:12;;;;-1:-1:-1;19915:7:0;;;19892:12;;-1:-1:-1;19892:12:0;;;;;;:31;;;;:12;;;;;;;;;;:31;19934:39;19944:10;19956:5;19963:9;19934;:39::i;:::-;;19438:542;;;:::o;17049:1886::-;7403:10;17179:21;7360:23;;;:11;:23;;;;;;;;;7350:34;;:9;:34;;;;;:49;7415:27;;;;;;;;;;;;;;;;;;;17179:21;;;;;;;;;;;;7415:27;;7350:63;:49;;;:63;7342:101;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;7342:101:0;-1:-1:-1;621:42:35;393:66;621:40;:42::i;:::-;665:15;;;;;;;;;;;;;;;;;;620:43;612:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;612:69:35;-1:-1:-1;735:46:35;393:66;776:4;735:46;:40;:46;:::i;:::-;17243:10:0;17231:23;;;;:11;:23;;;;;;;;;17292:21;;;:9;:21;;;;;;17231:23;;-1:-1:-1;17292:21:0;-1:-1:-1;17323:48:0;17292:21;17323:38;:48::i;:::-;17389:21;;;:85;;-1:-1:-1;17434:33:0;;;:40;17414:60;;17389:85;17476:24;;;;;;;;;;;;;;;;;;17381:120;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;17381:120:0;-1:-1:-1;17568:19:0;17559:5;:28;;;;;;;;;17555:1165;;;17902:35;17928:8;17902:25;:35::i;:::-;17876:61;;17967:55;17988:15;18005:16;17967:20;:55::i;:::-;17951:71;;18036:67;18079:8;18089:13;18036:42;:67::i;:::-;17555:1165;;;18133:25;18124:5;:34;;;;;;;;;18120:600;;;18203:8;:23;;;18174:52;;18256:58;18277:18;18297:16;18256:20;:58::i;:::-;18240:74;-1:-1:-1;18354:37:0;:18;18240:74;18354:37;:22;:37;:::i;:::-;18328:23;;;:63;18120:600;;;18421:17;18412:5;:26;;;;;;;;;18408:312;;;-1:-1:-1;18480:14:0;;;;18524:55;18480:14;18562:16;18524:20;:55::i;:::-;18508:71;-1:-1:-1;18610:34:0;:15;18508:71;18610:34;:19;:34;:::i;:::-;18593:14;;;:51;18408:312;;;18682:26;;;;;;;;;;;;;;;;;;;18675:34;;;;;;;;;;;;;;;;;;;18682:26;;18675:34;;;;;;;;18682:26;18675:34;;18682:26;-1:-1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;18408:312:0;18782:66;18804:10;18816:5;18823:13;18838:9;;18782:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18782:21:0;;-1:-1:-1;;;;;18782:66:0:i;:::-;18850:18;;;;;;;;;;;;;;;;;;18774:95;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;18774:95:0;;18879:49;18917:10;18879:37;:49::i;:::-;881:47:35;393:66;922:5;881:47;:40;:47;:::i;:::-;17049:1886:0;;;;;;;;;;:::o;287:117:34:-;331:4;277:2;354:24;:22;:24::i;:::-;:43;347:50;;287:117;:::o;10638:333:0:-;1471:66;10803:69;10807:15;10824:26;10852:19;;;10803:3;:69::i;:::-;1148:38:23;1159:10;1171:5;1178:7;1148:10;:38::i;:::-;1188:17;;;;;;;;;;;;;;;;;;1140:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;1140:66:23;;10888:76:0;10901:15;10918:26;10946:10;10958:5;;10888:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10888:12:0;;-1:-1:-1;;;;;10888:76:0:i;:::-;10638:333;;;;;;;:::o;5161:32::-;;;;;;:::o;23433:126::-;23508:4;737:16:32;:14;:16::i;:::-;755:21;;;;;;;;;;;;;;;;;;729:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;729:48:32;-1:-1:-1;;23531:21:0;;;;;;:13;:21;;;;;;;;;23433:126::o;19106:80::-;19175:4;19106:80;:::o;15112:1163::-;7403:10;15443:18;7360:23;;;:11;:23;;;;;;;;;7350:34;;:9;:34;;;;;:49;7415:27;;;;;;;;;;;;;;;;;;;15443:18;;;;15602:46;;15443:18;;;;7415:27;7350:63;:49;:63;7342:101;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;7342:101:0;-1:-1:-1;621:42:35;393:66;621:40;:42::i;:::-;665:15;;;;;;;;;;;;;;;;;;620:43;612:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;612:69:35;-1:-1:-1;735:46:35;393:66;776:4;735:46;:40;:46;:::i;:::-;15317:24:0;;;;;;;;;;;;;;;;;2438:2;15279:36;;;15271: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;;15271:71:0;-1:-1:-1;15400:31:0;;;;;;;;;;;;;;;;;;;;;;;;15360:38;;;15352:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;15352:80:0;-1:-1:-1;15476:10:0;15464:23;;;;:11;:23;;;;;;;;;15525:21;;;:9;:21;;;;;;15651:33;;;15602:82;;;;;;;;;;;;;;;;;15464:23;;-1:-1:-1;15525:21:0;;-1:-1:-1;15602:82:0;;15651:33;;15602:82;;15651:33;15602:82;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15711:1;15699:13;;15694:158;15718:29;:36;15714:1;:40;15694:158;;;15782:8;:25;;:59;15808:29;15838:1;15808:32;;;;;;;;;;;;;;;;;;;;15782:59;;;;;;;;;;;;-1:-1:-1;15782:59:0;;;15775:66;15756:3;;;;;15694:158;;;15861:40;15868:33;;;;15861:40;:::i;:::-;-1:-1:-1;15991:1:0;15974:190;15994:18;;;15974:190;;;16033:33;;;16072:7;;16080:1;16072:10;;;;;;;27::-1;;39:1;23:18;;45:23;;-1:-1;16033:50:0;;;16072:10;16033:50;;;;;;;;;16072:10;;;;;;;;;;;;;;16033:50;;;;;;-1:-1:-1;16137:13:0;;16151:1;16137:16;;;;;;;;;;;;;16097:8;:25;;:37;16123:7;;16131:1;16123:10;;;;;;;;;;;;;;;;;;;;16097:37;;-1:-1:-1;16097:37:0;;;;;;;;-1:-1:-1;16097:37:0;:56;16014:3;;15974:190;;;16174:48;16213:8;16174:38;:48::i;:::-;16237:31;;16257:10;;16237:31;;;;;881:47:35;393:66;922:5;881:47;:40;:47;:::i;:::-;15112:1163:0;;;;;;;;;:::o;20611:229::-;20716:28;;;20689:7;20716:28;;;:11;:28;;;;;;;;;20760:27;;;;;;;;;;;;;;;;;;;;20716:42;;20708:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;20708:80:0;-1:-1:-1;;20805:28:0;;;;;;:11;:28;;;;;;;20611:229::o;347:94:37:-;422:12;347:94;:::o;1871:179:14:-;1970:16;;;1984:1;1970:16;;;;;;;;;1943:11;;1970:16;;;1943:11;;105:10:-1;1970:16:14;88:34:-1;136:17;;-1:-1;1970:16:14;1966:20;;2003:2;1996:1;1998;1996:4;;;;;;;;;;;;;;;;;;:9;2015:4;;2022:2;;2015:1;;2017;;2015:4;;;;;;;;;;;;;;:9;2034:4;;2041:2;;2034:1;;2036;;2034:4;;;;;;;;;;;;;;:9;1871:179;;-1:-1:-1;;;1871:179:14:o;35314:144:0:-;35387:4;35428:22;;;:9;:22;;;;;35410:41;;:17;:41::i;:::-;35403:48;35314:144;-1:-1:-1;;35314:144:0:o;36718:571::-;36823:7;36842:16;36964:14;37107;36861:32;36883:9;36861:21;:32::i;:::-;36842:51;-1:-1:-1;36907:13:0;;36903:52;;;36943:1;36936:8;;;;36903:52;36981:9;:33;;;36964:50;;37029:7;37025:258;;;-1:-1:-1;37124:17:0;;;:6;37133:8;37124:17;37163;;;;;;;;:27;;37162:52;;37208:6;37162:52;;;2673:2;37162:52;37155:59;;;;37025:258;37252:20;:6;37263:8;37252:20;:10;:20;:::i;37025:258::-;36718:571;;;;;;;:::o;26467:272::-;26551:25;26579:22;;;:9;:22;;;;;26636;;;;:35;;26663:7;26636:35;:26;:35;:::i;:::-;26611:22;;;:60;26686:46;;;;;;;;26711:11;;26686:46;;;;;;;;;;26467:272;;;:::o;1261:106:37:-;1310:6;1335:25;:14;:12;:14::i;:::-;:23;:25::i;105:128:39:-;210:15;;200:27::o;659:113::-;742:22;;740:26::o;26923:495:0:-;27093:27;;;;;;;;;;;;;;;;;27062:29;;;;;27054:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;27054:67:0;-1:-1:-1;27189:28:0;;;27229:1;27189:28;;;:11;:28;;;;;;;;;;27233;;;;;;;;;;;;;;;;;;;27189:42;27181:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;27181:81:0;-1:-1:-1;27273:22:0;;;;:9;:22;;;;;;;;:55;;;;;;;;;;;;;;27369:28;;;:11;:28;;;:42;26923:495::o;1717:148:14:-;1804:16;;;1818:1;1804:16;;;1777:11;1804:16;;;;;1777:11;1804:16;;;;;105:10:-1;1804:16:14;88:34:-1;136:17;;-1:-1;1804:16:14;1800:20;;1837:2;1830:1;1832;1830:4;;;;;;;;;;;;;;;;;;:9;1849:4;;1856:2;;1849:1;;1851;;1849:4;;;;;;;;;;;;;;:9;1717:148;;-1:-1:-1;;1717:148:14:o;27587:306:0:-;27734:16;:14;:16::i;:::-;27752:27;;;;;;;;;;;;;;;;;;27722:28;;;;;;;;;27714:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;27714:66:0;-1:-1:-1;27790:22:0;;;;:9;:22;;;;;;;;;:30;;:41;;;;;;;;;;;;;;;;;;27846:40;;;;;;;27790:22;;27846:40;;;;;;;;;27587:306;;:::o;33701:150::-;33770:4;33793:22;;;:9;:22;;;;;:37;:51;:37;:51;;;33701:150::o;1447:123:32:-;615:24;:22;:24::i;:::-;646:25;;;;;;;;;;;;;;;;;;615:29;607:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;607:65:32;;1498;1546:16;:14;:16::i;:::-;345:66;;1498:65;:47;:65;:::i;:::-;1447:123::o;426:244:33:-;486:4;;506:21;;;;502:64;;;550:5;543:12;;;;502:64;-1:-1:-1;;662:1:33;617:20;;655:8;;426:244::o;23716:168:0:-;23779:17;23790:5;23779:10;:17::i;:::-;23798:23;;;;;;;;;;;;;;;;;;23771:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;23771:51:0;-1:-1:-1;23832:4:0;:12;;;;;;;;;;;;;;;;23859:18;;23872:4;;;23859:18;;-1:-1:-1;;23859:18:0;23716:168;:::o;24165:269::-;24319:27;;;;;;;;;;;;;;;;;2534:9;24293:24;;;;;24285:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;24285:62:0;-1:-1:-1;24357:14:0;:22;;;;;;;;;;;;;;;;;;;;;;24394:33;;;24412:14;;;;;24394:33;;;;;;;;;;;;;24165:269;:::o;542:126:14:-;602:11;632:29;644:2;636:11;;657:2;649:11;;632:3;:29::i;435:101::-;483:11;513:16;525:2;517:11;;513:3;:16::i;519:134:39:-;630:15;;620:27::o;4578:403:36:-;4708:91;;;4744:16;4708:91;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;4708:91:36;;;;;;;;25:18:-1;;61:17;;4708:91:36;182:15:-1;4744:25:36;179:29:-1;160:49;;4656:7:36;;;;4849:39;4744:6;4708:91;4849:12;:39::i;:::-;4915:28;;;;;;;;;;;;;;;;;4810:78;;-1:-1:-1;4810:78:36;-1:-1:-1;4898:46:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;4898:46:36;-1:-1:-1;4962:12:36;4578:403;-1:-1:-1;;;;;4578:403:36:o;3100:304::-;3232:101;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;3232:101:36;;;;;;;;25:18:-1;;61:17;;3232:101:36;182:15:-1;3268:17:36;179:29:-1;160:49;;3184:4:36;;3350:47;3372:6;3232:101;3350:21;:47::i;:::-;3343:54;3100:304;-1:-1:-1;;;;;3100:304:36:o;142:539:25:-;559:13;;575:2;559:18;639:26;;559:6;596:79::o;38764:416:0:-;38850:7;38869:25;38968:23;38897:47;38928:9;38939:4;38897:30;:47::i;:::-;38869:75;;39014:9;:23;;;38994:17;:43;38968:69;;39069:17;39051:15;:35;39047:95;;;-1:-1:-1;2673:2:0;39047:95;39158:15;39151:22;;38764:416;;;;;;:::o;25517:240::-;25593:25;25621:22;;;:9;:22;;;;;25670:14;;;;:27;;25689:7;25670:27;:18;:27;:::i;:::-;25653:14;;;:44;25712:38;;;;;;;;25729:11;;25712:38;;;;;;;;;;25517:240;;;:::o;25975:274::-;26059:25;26087:22;;;:9;:22;;;;;;;;26145:23;;;;:36;;26173:7;26145:36;:27;:36;:::i;:::-;26119:23;;;:62;26196:46;;;;;;;;26221:11;;26196:46;;;;;;;;;;25975:274;;;:::o;1217:3212:42:-;1364:5;1385:27;1533:10;1584:17;1671:19;737:16:32;:14;:16::i;:::-;755:21;;;;;;;;;;;;;;;;;;729:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;729:48:32;;4467:17:42;4514:16;4495:8;:6;:8::i;:::-;4467:37;;4533:7;:5;:7::i;:::-;4514:26;;1415:29;1436:7;1415:20;:29::i;:::-;1495:26;;;;;;;;;;;;;;;;;1385:59;;-1:-1:-1;1462:31:42;;;;;1454:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;1454:68:42;-1:-1:-1;1604:56:42;;;;;;;;;;;;;;;;;1546:28;;-1:-1:-1;1546:28:42;;1632:7;;1641:6;;1649:10;;1604:56;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;1604:56:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1604:56:42;;;;;;;;;;;;;;;;;;;;;;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;1604:56:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1604:56:42;;;;;;;;;;;;;;;;;;;;;;;;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;1604:56:42;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;1604:56:42;;;;;;;38:4:-1;29:7;25:18;67:10;61:17;96:58;199:8;192:4;186;182:15;179:29;167:10;160:49;0:215;;;1604:56:42;1584:76;;2067:1;1979;1930:4;1924:11;1880:4;1874;1870:15;1823:8;1768:3;1738:384;2152:4;2146:11;;-1:-1:-1;2198:7:42;2218:195;;;;2478:4;2462:14;2459:24;2500:970;;;;4144:4;4128:14;4124:25;4199:8;4193:4;4185:6;4170:38;4243:21;;4237:4;4230:35;2452:1851;;2500:970;2853:66;2845:6;2838:82;2995:66;2988:4;2980:6;2976:17;2969:93;3128:66;3121:4;3113:6;3109:17;3102:93;3259:66;3252:4;3244:6;3240:17;3233:93;3373:3;3365:6;3358:19;2452:1851;;2191:2126;;2218:195;2337:14;2334:1;2326:6;2311:41;2384:14;2376:6;2369:30;2191:2126;;1709:2618;4363:8;4342:56;;;4374:7;4383:6;4391;4342:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;4342:56:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4342:56:42;;;;;;;;;;;;;;;;;;;;;;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;4342:56:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4342:56:42;;;;;;;;;;;;;;;;;;;;;;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;4342:56:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4416:6;4409:13;;4598:9;4577:30;;4585:8;:6;:8::i;:::-;4577:30;;;4609;;;;;;;;;;;;;;;;;;4569: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;;4569:71:42;-1:-1:-1;4669:8:42;4658:7;:5;:7::i;:::-;4679:30;;;;;;;;;;;;;;;;;;4658:19;4650:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;4650:60:42;;787:1:32;;1217:3212:42;;;;;;;;;:::o;34146:537:0:-;34246:11;34271:41;34364:9;34435:13;34260:1;34246:15;;34315:9;:34;;34271:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34376:1;34364:13;;34359:260;34383:24;:31;34379:1;:35;34359:260;;;34451:24;34476:1;34451:27;;;;;;;;;;;;;;;;;;;;34500:20;;;;;;;:13;:20;;;;;;;;34522:23;;;;;;;;;;;;;;;;;;;34451:27;;-1:-1:-1;34522:23:0;34500:20;;34492:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;34492:54:0;-1:-1:-1;34574:33:0;;;;;;;:26;;;:33;;;;;;34566:42;;:3;;:42;:7;:42;:::i;:::-;34560:48;-1:-1:-1;34416:3:0;;;;;34359:260;;;34648:27;;;;;;;;;;;;;;;;;34643:3;34636:10;;34628:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;34628:48:0;;34146:537;;;;;:::o;39799:321::-;39942:18;;;;;;;;;;;;;;;;;39898:7;;39925:15;;;39917:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;39917:44:0;-1:-1:-1;40012:30:0;;;;;;;;;;;;;;;;;39979:31;;;;39971: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;;39971:72:0;;40079:1;40060:16;:20;:53;;40102:11;40060:53;;31175:2286;31322:23;;;;31298:21;;;;;31360:31;;;31356:366;;31661:30;;;31635:23;;;:56;31705:7;;31356:366;31925:14;31897:42;;31969:1;31953:13;:17;31949:441;;;32378:1;32352:23;;;:27;32247:30;;;;-1:-1:-1;31949:441:0;32417:33;;;;;-1:-1:-1;32479:29:0;:17;32417:33;32479:29;:21;:29;:::i;:::-;32460:48;;32790:6;32770:17;:26;;;;;;;;32748:48;;32824:1;32810:11;:15;32806:132;;;32852:15;:8;32865:1;32852:15;:12;:15;:::i;:::-;32907:20;;;32881:23;;;:46;32841:26;-1:-1:-1;32806:132:0;32982:21;;;;32974:44;;32982:21;;33009:8;32974:44;:34;:44;:::i;:::-;32948:70;;33276:16;:14;:16::i;:::-;33295:31;;;;;;;;;;;;;;;;;;33268:25;;33249:44;;;33241:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;33241:86:0;-1:-1:-1;33407:21:0;;;:47;;;;;;;;;;31175:2286;;;;;;;;;:::o;1685:172:59:-;1782:19;;;;;;;;;;;;;;;;;1745:7;;;;1772:8;;;;1764:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;1764:38:59;-1:-1:-1;;;1824:7:59;;;1685:172::o;28453:1822:0:-;28585:18;;;28804:30;28585:18;;;;;;28619:17;;28615:60;;;28659:5;28652:12;;;;28615:60;28713:22;;;;:9;:22;;;;;28771:23;;28713:22;;-1:-1:-1;28771:23:0;;;-1:-1:-1;28837:27:0;28858:5;28837:20;:27::i;:::-;28804:60;;28920:8;:33;;28875:78;;28980:1;28968:13;;28963:1306;28987:31;;28983:35;;28963:1306;;;29055:24;29080:1;29055:27;;;;;;;;;;;;;;;;;;;;;;;;29122:32;;;:25;;;:32;;;;;;;;29055:27;;-1:-1:-1;29122:32:0;-1:-1:-1;29172:29:0;;29168:1091;;29391:42;29427:5;29391:35;:42::i;:::-;29368:65;;29478:1;29459:9;:16;:20;:70;;29528:1;29513:12;:16;29459:70;;;29498:9;29508:1;29498:12;;;;;;;;;;;;;;;;;;29482;:28;;29459:70;29531:27;;;;;;;;;;;;;;;;;;29451:108;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;29451:108:0;-1:-1:-1;29696:51:0;29731:15;29696:30;:12;29713;29696:30;:16;:30;:::i;:::-;:34;:51;:34;:51;:::i;:::-;29674:73;;29877:46;29902:4;;;;;;;;;;;:18;;;:20;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;29902:20:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29902:20:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;29902:20:0;29877;:11;29893:3;29877:20;:15;:20;:::i;:::-;:24;:46;:24;:46;:::i;:::-;29863:60;;30008:7;;;;;;;;;;;:27;;;30036:5;30043:15;30060:11;30073:16;30008:82;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;30008:82:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30008:82:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30008:82:0;;;;30155:5;30113:93;;30138:15;30113:93;;30125:11;30113:93;30162:11;30175:12;30189:16;30113:93;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;30113:93:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30240:4;30224:20;;29168:1091;29020:3;;;;;28963:1306;;;28453:1822;;;;;;;;;;;;;;;:::o;30441:433::-;30528:25;30556:22;;;:9;:22;;;;;30630:16;;;;;30606:20;;;30630:16;;;;;30606:40;:140;;;;-1:-1:-1;30663:22:0;;;;:27;:50;;;;-1:-1:-1;30694:14:0;;;;:19;30663:50;:82;;;;-1:-1:-1;30717:23:0;;;;:28;30663:82;30589:279;;;30790:23;;;;30778:36;;;;:11;:36;;;;;;;;30771:43;;;30835:22;;;:9;:22;;;;;;30828:29;;;;;;30790:23;30828:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30835:22;30828:29;;;;30778:36;30828:29;:::i;30589:279::-;30441:433;;:::o;674:133:14:-;746:11;776:24;788:2;780:11;;793:2;797;776:3;:24::i;:::-;769:31;674:133;-1:-1:-1;;;;674:133:14:o;24761:552:0:-;24917:12;:14;;;;;;;;24896:18;24942:48;24917:14;24974:15;24942:19;:48::i;:::-;-1:-1:-1;25029:21:0;;;;:9;:21;;;;;;;;25060:32;;;:61;;;25131:20;;;:33;;25174:29;25131:33;;;;;;;;;25174:29;;;;;;25219:87;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25029:21;;25219:87;;;;25039:10;;25219:87;;25095:26;;25154:10;;25300:5;;25219:87;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;25219:87:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24761:552;;;;;;:::o;34926:145::-;35004:4;35048:16;:14;:16::i;:::-;35027:17;;;;:37;;;;:17;;;;;;;:37;;;-1:-1:-1;34926:145:0;;;:::o;37489:882::-;37571:7;37650:11;37664:28;37682:9;37664:17;:28::i;:::-;:67;;37714:17;;;;;;;;;37664:67;;;37695:16;:14;:16::i;:::-;38139:21;;;;37650:81;;-1:-1:-1;38139:21:0;;;;38131:29;;;;38127:68;;38183:1;38176:8;;;;38127:68;38342:21;;;;;;;;38335:28;;38327:37;;-1:-1:-1;37489:882:0;;;;:::o;685:448:59:-;745:7;;985;;981:46;;;1015:1;1008:8;;;;981:46;-1:-1:-1;1049:7:59;;;1054:2;1049;:7;1074:6;;;;;;;1088:18;;;;;;;;;;;;;;;;;;1074:6;;;:12;1066:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;1928:170:59;2053:18;;;;;;;;;;;;;;;;;1988:7;;2019;;;;2044;;;;2036:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;926:144:37;999:15;926:144;:::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;1028:119:39:-;1117:22;;1115:26::o;1594:117:14:-;1669:16;;;1683:1;1669:16;;;;;;;;;1642:11;;1669:16;;;;;;105:10:-1;1669:16:14;88:34:-1;136:17;;-1:-1;1669:16:14;1665:20;;1702:2;1695:1;1697;1695:4;;;;;;;;;;;;;;;;;;:9;1594:117;;-1:-1:-1;1594:117:14:o;2148:774:36:-;2255:4;2261:7;2284:12;2306:11;2367:4;2361:11;2741:4;2670:3;2619:9;2613:16;2572:4;2561:9;2557:20;2508:5;2451:3;2423:371;2412:382;;2823:1;2814:7;2811:14;2808:2;;;2857:3;2851:10;2844:17;;2808:2;-1:-1:-1;2902:7:36;;2911:3;;-1:-1:-1;2148:774:36;-1:-1:-1;;;2148:774:36:o;800:1342::-;903:4;923:8;981:4;975:11;1403:4;1332:3;1281:9;1275:16;1234:4;1223:9;1219:20;1169:1;1120:5;1063:3;1041:415;1485:1;1476:7;1473:14;1470:2;;;1587:14;1672:55;;;;1806:4;1801:193;;;;1580:512;;1672:55;1708:1;1701:8;;1672:55;;1801:193;1974:1;1968:3;1962:10;1959:17;1952:24;;1580:512;;1470:2;-1:-1:-1;2132:3:36;;800:1342;-1:-1:-1;;;;800:1342:36:o;1251:313:59:-;1346:14;;;;;;;;;;;;;;;;;1311:7;;;;1338:6;;;1330:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;1330:31:59;;1446:2;1441;:7;;;;;;;;;1251:313;-1:-1:-1;;;;1251:313:59:o;39380:413:0:-;39452:6;39490:19;39481:5;:28;;;;;;;;;39477:185;;;-1:-1:-1;39525:24:0;;;;;;;;;;;;;;;;;;;39477:185;39579:25;39570:5;:34;;;;;;;;;39566:96;;;-1:-1:-1;39620:31:0;;;;;;;;;;;;;;;;;;;39566:96;39676:17;39667:5;:26;;;;;;;;;39663:80;;;-1:-1:-1;39709:23:0;;;;;;;;;;;;;;;;;;;35839:524;36062:4;;;36084:17;36062:122;;;;;;:4;36084:17;;;36062:122;;;;;;;;;;;;;35923:7;;;;;;36062:4;;;:8;;:122;;;;;;;;;;;35923:7;36062:4;:122;;;5:2:-1;;;;30:1;27;20:12;5:2;36062:122:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;36062:122:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;36062:122:0;;;;;;;36278:14;;36062:122;;-1:-1:-1;36062:122:0;-1:-1:-1;36278:14:0;;;;;36248:26;36062:122;36248:16;:14;:16::i;:::-;:20;;;:26;:20;:26;:::i;:::-;:44;;;36244:83;;36315:1;36308:8;;;;36244:83;-1:-1:-1;36344:12:0;;;35839:524;-1:-1:-1;;35839:524:0:o;1596:168:60:-;1690:19;;;;;;;;;;;;;;;;;1654:6;;;;1680:8;;;;;;;;;1672:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;508:39614:0;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;;;;;;;;;;;",
  "source": "pragma solidity 0.4.24;\n\nimport \"@aragon/os/contracts/apps/AragonApp.sol\";\nimport \"@aragon/os/contracts/common/EtherTokenConstant.sol\";\nimport \"@aragon/os/contracts/common/IsContract.sol\";\nimport \"@aragon/os/contracts/common/IForwarder.sol\";\n\nimport \"@aragon/os/contracts/lib/math/SafeMath.sol\";\nimport \"@aragon/os/contracts/lib/math/SafeMath64.sol\";\n\nimport \"@aragon/ppf-contracts/contracts/IFeed.sol\";\nimport \"@aragon/apps-finance/contracts/Finance.sol\";\n\n\n/**\n * @title Payroll in multiple currencies\n */\ncontract Payroll is EtherTokenConstant, IForwarder, IsContract, AragonApp {\n    using SafeMath for uint256;\n    using SafeMath64 for uint64;\n\n    /* Hardcoded constants to save gas\n    * bytes32 constant public ADD_EMPLOYEE_ROLE = keccak256(\"ADD_EMPLOYEE_ROLE\");\n    * bytes32 constant public TERMINATE_EMPLOYEE_ROLE = keccak256(\"TERMINATE_EMPLOYEE_ROLE\");\n    * bytes32 constant public SET_EMPLOYEE_SALARY_ROLE = keccak256(\"SET_EMPLOYEE_SALARY_ROLE\");\n    * bytes32 constant public ADD_BONUS_ROLE = keccak256(\"ADD_BONUS_ROLE\");\n    * bytes32 constant public ADD_REIMBURSEMENT_ROLE = keccak256(\"ADD_REIMBURSEMENT_ROLE\");\n    * bytes32 constant public MANAGE_ALLOWED_TOKENS_ROLE = keccak256(\"MANAGE_ALLOWED_TOKENS_ROLE\");\n    * bytes32 constant public MODIFY_PRICE_FEED_ROLE = keccak256(\"MODIFY_PRICE_FEED_ROLE\");\n    * bytes32 constant public MODIFY_RATE_EXPIRY_ROLE = keccak256(\"MODIFY_RATE_EXPIRY_ROLE\");\n    */\n\n    bytes32 constant public ADD_EMPLOYEE_ROLE = 0x9ecdc3c63716b45d0756eece5fe1614cae1889ec5a1ce62b3127c1f1f1615d6e;\n    bytes32 constant public TERMINATE_EMPLOYEE_ROLE = 0x69c67f914d12b6440e7ddf01961214818d9158fbcb19211e0ff42800fdea9242;\n    bytes32 constant public SET_EMPLOYEE_SALARY_ROLE = 0xea9ac65018da2421cf419ee2152371440c08267a193a33ccc1e39545d197e44d;\n    bytes32 constant public ADD_BONUS_ROLE = 0xceca7e2f5eb749a87aaf68f3f76d6b9251aa2f4600f13f93c5a4adf7a72df4ae;\n    bytes32 constant public ADD_REIMBURSEMENT_ROLE = 0x90698b9d54427f1e41636025017309bdb1b55320da960c8845bab0a504b01a16;\n    bytes32 constant public MANAGE_ALLOWED_TOKENS_ROLE = 0x0be34987c45700ee3fae8c55e270418ba903337decc6bacb1879504be9331c06;\n    bytes32 constant public MODIFY_PRICE_FEED_ROLE = 0x74350efbcba8b85341c5bbf70cc34e2a585fc1463524773a12fa0a71d4eb9302;\n    bytes32 constant public MODIFY_RATE_EXPIRY_ROLE = 0x79fe989a8899060dfbdabb174ebb96616fa9f1d9dadd739f8d814cbab452404e;\n\n    uint256 internal constant MAX_ALLOWED_TOKENS = 20; // prevent OOG issues with `payday()`\n    uint64 internal constant MIN_RATE_EXPIRY = uint64(1 minutes); // 1 min == ~4 block window to mine both a price feed update and a payout\n\n    uint256 internal constant MAX_UINT256 = uint256(-1);\n    uint64 internal constant MAX_UINT64 = uint64(-1);\n\n    string private constant ERROR_EMPLOYEE_DOESNT_EXIST = \"PAYROLL_EMPLOYEE_DOESNT_EXIST\";\n    string private constant ERROR_NON_ACTIVE_EMPLOYEE = \"PAYROLL_NON_ACTIVE_EMPLOYEE\";\n    string private constant ERROR_SENDER_DOES_NOT_MATCH = \"PAYROLL_SENDER_DOES_NOT_MATCH\";\n    string private constant ERROR_FINANCE_NOT_CONTRACT = \"PAYROLL_FINANCE_NOT_CONTRACT\";\n    string private constant ERROR_TOKEN_ALREADY_SET = \"PAYROLL_TOKEN_ALREADY_SET\";\n    string private constant ERROR_MAX_ALLOWED_TOKENS = \"PAYROLL_MAX_ALLOWED_TOKENS\";\n    string private constant ERROR_MIN_RATES_MISMATCH = \"PAYROLL_MIN_RATES_MISMATCH\";\n    string private constant ERROR_TOKEN_ALLOCATION_MISMATCH = \"PAYROLL_TOKEN_ALLOCATION_MISMATCH\";\n    string private constant ERROR_NOT_ALLOWED_TOKEN = \"PAYROLL_NOT_ALLOWED_TOKEN\";\n    string private constant ERROR_DISTRIBUTION_NOT_FULL = \"PAYROLL_DISTRIBUTION_NOT_FULL\";\n    string private constant ERROR_INVALID_PAYMENT_TYPE = \"PAYROLL_INVALID_PAYMENT_TYPE\";\n    string private constant ERROR_NOTHING_PAID = \"PAYROLL_NOTHING_PAID\";\n    string private constant ERROR_CAN_NOT_FORWARD = \"PAYROLL_CAN_NOT_FORWARD\";\n    string private constant ERROR_EMPLOYEE_NULL_ADDRESS = \"PAYROLL_EMPLOYEE_NULL_ADDRESS\";\n    string private constant ERROR_EMPLOYEE_ALREADY_EXIST = \"PAYROLL_EMPLOYEE_ALREADY_EXIST\";\n    string private constant ERROR_FEED_NOT_CONTRACT = \"PAYROLL_FEED_NOT_CONTRACT\";\n    string private constant ERROR_EXPIRY_TIME_TOO_SHORT = \"PAYROLL_EXPIRY_TIME_TOO_SHORT\";\n    string private constant ERROR_PAST_TERMINATION_DATE = \"PAYROLL_PAST_TERMINATION_DATE\";\n    string private constant ERROR_EXCHANGE_RATE_TOO_LOW = \"PAYROLL_EXCHANGE_RATE_TOO_LOW\";\n    string private constant ERROR_LAST_PAYROLL_DATE_TOO_BIG = \"PAYROLL_LAST_DATE_TOO_BIG\";\n    string private constant ERROR_INVALID_REQUESTED_AMOUNT = \"PAYROLL_INVALID_REQUESTED_AMT\";\n\n    enum PaymentType { Payroll, Reimbursement, Bonus }\n\n    struct Employee {\n        address accountAddress; // unique, but can be changed over time\n        uint256 denominationTokenSalary; // salary per second in denomination Token\n        uint256 accruedSalary; // keep track of any leftover accrued salary when changing salaries\n        uint256 bonus;\n        uint256 reimbursements;\n        uint64 lastPayroll;\n        uint64 endDate;\n        address[] allocationTokenAddresses;\n        mapping(address => uint256) allocationTokens;\n    }\n\n    Finance public finance;\n    address public denominationToken;\n    IFeed public feed;\n    uint64 public rateExpiryTime;\n\n    // Employees start at index 1, to allow us to use employees[0] to check for non-existent employees\n    uint256 public nextEmployee;\n    mapping(uint256 => Employee) internal employees;     // employee ID -> employee\n    mapping(address => uint256) internal employeeIds;    // employee address -> employee ID\n\n    mapping(address => bool) internal allowedTokens;\n\n    event AddEmployee(\n        uint256 indexed employeeId,\n        address indexed accountAddress,\n        uint256 initialDenominationSalary,\n        uint64 startDate,\n        string role\n    );\n    event TerminateEmployee(uint256 indexed employeeId, uint64 endDate);\n    event SetEmployeeSalary(uint256 indexed employeeId, uint256 denominationSalary);\n    event AddEmployeeAccruedSalary(uint256 indexed employeeId, uint256 amount);\n    event AddEmployeeBonus(uint256 indexed employeeId, uint256 amount);\n    event AddEmployeeReimbursement(uint256 indexed employeeId, uint256 amount);\n    event ChangeAddressByEmployee(uint256 indexed employeeId, address indexed newAccountAddress, address indexed oldAccountAddress);\n    event DetermineAllocation(uint256 indexed employeeId);\n    event SendPayment(\n        uint256 indexed employeeId,\n        address indexed accountAddress,\n        address indexed token,\n        uint256 amount,\n        uint256 exchangeRate,\n        string paymentReference\n    );\n    event SetAllowedToken(address indexed token, bool allowed);\n    event SetPriceFeed(address indexed feed);\n    event SetRateExpiryTime(uint64 time);\n\n    // Check employee exists by ID\n    modifier employeeIdExists(uint256 _employeeId) {\n        require(_employeeExists(_employeeId), ERROR_EMPLOYEE_DOESNT_EXIST);\n        _;\n    }\n\n    // Check employee exists and is still active\n    modifier employeeActive(uint256 _employeeId) {\n        // No need to check for existence as _isEmployeeIdActive() is false for non-existent employees\n        require(_isEmployeeIdActive(_employeeId), ERROR_NON_ACTIVE_EMPLOYEE);\n        _;\n    }\n\n    // Check sender matches an existing employee\n    modifier employeeMatches {\n        require(employees[employeeIds[msg.sender]].accountAddress == msg.sender, ERROR_SENDER_DOES_NOT_MATCH);\n        _;\n    }\n\n    /**\n     * @notice Initialize Payroll app for Finance at `_finance` and price feed at `_priceFeed`, setting denomination token to `_token` and exchange rate expiry time to `@transformTime(_rateExpiryTime)`\n     * @dev Note that we do not require _denominationToken to be a contract, as it may be a \"fake\"\n     *      address used by the price feed to denominate fiat currencies\n     * @param _finance Address of the Finance app this Payroll app will rely on for payments (non-changeable)\n     * @param _denominationToken Address of the denomination token used for salary accounting\n     * @param _priceFeed Address of the price feed\n     * @param _rateExpiryTime Acceptable expiry time in seconds for the price feed's exchange rates\n     */\n    function initialize(Finance _finance, address _denominationToken, IFeed _priceFeed, uint64 _rateExpiryTime) external onlyInit {\n        initialized();\n\n        require(isContract(_finance), ERROR_FINANCE_NOT_CONTRACT);\n        finance = _finance;\n\n        denominationToken = _denominationToken;\n        _setPriceFeed(_priceFeed);\n        _setRateExpiryTime(_rateExpiryTime);\n\n        // Employees start at index 1, to allow us to use employees[0] to check for non-existent employees\n        nextEmployee = 1;\n    }\n\n    /**\n     * @notice `_allowed ? 'Add' : 'Remove'` `_token.symbol(): string` `_allowed ? 'to' : 'from'` the set of allowed tokens\n     * @param _token Address of the token to be added or removed from the list of allowed tokens for payments\n     * @param _allowed Boolean to tell whether the given token should be added or removed from the list\n     */\n    function setAllowedToken(address _token, bool _allowed) external authP(MANAGE_ALLOWED_TOKENS_ROLE, arr(_token)) {\n        require(allowedTokens[_token] != _allowed, ERROR_TOKEN_ALREADY_SET);\n        allowedTokens[_token] = _allowed;\n        emit SetAllowedToken(_token, _allowed);\n    }\n\n    /**\n     * @notice Set the price feed for exchange rates to `_feed`\n     * @param _feed Address of the new price feed instance\n     */\n    function setPriceFeed(IFeed _feed) external authP(MODIFY_PRICE_FEED_ROLE, arr(_feed, feed)) {\n        _setPriceFeed(_feed);\n    }\n\n    /**\n     * @notice Set the acceptable expiry time for the price feed's exchange rates to `@transformTime(_time)`\n     * @dev Exchange rates older than the given value won't be accepted for payments and will cause payouts to revert\n     * @param _time The expiration time in seconds for exchange rates\n     */\n    function setRateExpiryTime(uint64 _time) external authP(MODIFY_RATE_EXPIRY_ROLE, arr(uint256(_time), uint256(rateExpiryTime))) {\n        _setRateExpiryTime(_time);\n    }\n\n    /**\n     * @notice Add employee with address `_accountAddress` to payroll with an salary of `_initialDenominationSalary` per second, starting on `@formatDate(_startDate)`\n     * @param _accountAddress Employee's address to receive payroll\n     * @param _initialDenominationSalary Employee's salary, per second in denomination token\n     * @param _startDate Employee's starting timestamp in seconds (it actually sets their initial lastPayroll value)\n     * @param _role Employee's role\n     */\n    function addEmployee(address _accountAddress, uint256 _initialDenominationSalary, uint64 _startDate, string _role)\n        external\n        authP(ADD_EMPLOYEE_ROLE, arr(_accountAddress, _initialDenominationSalary, uint256(_startDate)))\n    {\n        _addEmployee(_accountAddress, _initialDenominationSalary, _startDate, _role);\n    }\n\n    /**\n     * @notice Add `_amount` to bonus for employee #`_employeeId`\n     * @param _employeeId Employee's identifier\n     * @param _amount Amount to be added to the employee's bonuses in denomination token\n     */\n    function addBonus(uint256 _employeeId, uint256 _amount)\n        external\n        authP(ADD_BONUS_ROLE, arr(_employeeId, _amount))\n        employeeActive(_employeeId)\n    {\n        _addBonus(_employeeId, _amount);\n    }\n\n    /**\n     * @notice Add `_amount` to reimbursements for employee #`_employeeId`\n     * @param _employeeId Employee's identifier\n     * @param _amount Amount to be added to the employee's reimbursements in denomination token\n     */\n    function addReimbursement(uint256 _employeeId, uint256 _amount)\n        external\n        authP(ADD_REIMBURSEMENT_ROLE, arr(_employeeId, _amount))\n        employeeActive(_employeeId)\n    {\n        _addReimbursement(_employeeId, _amount);\n    }\n\n    /**\n     * @notice Set employee #`_employeeId`'s salary to `_denominationSalary` per second\n     * @dev This reverts if either the employee's owed salary or accrued salary overflows, to avoid\n     *      losing any accrued salary for an employee due to the employer changing their salary.\n     * @param _employeeId Employee's identifier\n     * @param _denominationSalary Employee's new salary, per second in denomination token\n     */\n    function setEmployeeSalary(uint256 _employeeId, uint256 _denominationSalary)\n        external\n        authP(SET_EMPLOYEE_SALARY_ROLE, arr(_employeeId, _denominationSalary, employees[_employeeId].denominationTokenSalary))\n        employeeActive(_employeeId)\n    {\n        Employee storage employee = employees[_employeeId];\n\n        // Accrue employee's owed salary; don't cap to revert on overflow\n        uint256 owed = _getOwedSalarySinceLastPayroll(employee, false);\n        _addAccruedSalary(_employeeId, owed);\n\n        // Update employee to track the new salary and payment date\n        employee.lastPayroll = getTimestamp64();\n        employee.denominationTokenSalary = _denominationSalary;\n\n        emit SetEmployeeSalary(_employeeId, _denominationSalary);\n    }\n\n    /**\n     * @notice Terminate employee #`_employeeId` on `@formatDate(_endDate)`\n     * @param _employeeId Employee's identifier\n     * @param _endDate Termination timestamp in seconds\n     */\n    function terminateEmployee(uint256 _employeeId, uint64 _endDate)\n        external\n        authP(TERMINATE_EMPLOYEE_ROLE, arr(_employeeId, uint256(_endDate)))\n        employeeActive(_employeeId)\n    {\n        _terminateEmployee(_employeeId, _endDate);\n    }\n\n    /**\n     * @notice Change your employee account address to `_newAccountAddress`\n     * @dev Initialization check is implicitly provided by `employeeMatches` as new employees can\n     *      only be added via `addEmployee(),` which requires initialization.\n     *      As the employee is allowed to call this, we enforce non-reentrancy.\n     * @param _newAccountAddress New address to receive payments for the requesting employee\n     */\n    function changeAddressByEmployee(address _newAccountAddress) external employeeMatches nonReentrant {\n        uint256 employeeId = employeeIds[msg.sender];\n        address oldAddress = employees[employeeId].accountAddress;\n\n        _setEmployeeAddress(employeeId, _newAccountAddress);\n        // Don't delete the old address until after setting the new address to check that the\n        // employee specified a new address\n        delete employeeIds[oldAddress];\n\n        emit ChangeAddressByEmployee(employeeId, _newAccountAddress, oldAddress);\n    }\n\n    /**\n     * @notice Set the token distribution for your payments\n     * @dev Initialization check is implicitly provided by `employeeMatches` as new employees can\n     *      only be added via `addEmployee(),` which requires initialization.\n     *      As the employee is allowed to call this, we enforce non-reentrancy.\n     * @param _tokens Array of token addresses; they must belong to the list of allowed tokens\n     * @param _distribution Array with each token's corresponding proportions (must be integers summing to 100)\n     */\n    function determineAllocation(address[] _tokens, uint256[] _distribution) external employeeMatches nonReentrant {\n        // Check array lengthes match\n        require(_tokens.length <= MAX_ALLOWED_TOKENS, ERROR_MAX_ALLOWED_TOKENS);\n        require(_tokens.length == _distribution.length, ERROR_TOKEN_ALLOCATION_MISMATCH);\n\n        uint256 employeeId = employeeIds[msg.sender];\n        Employee storage employee = employees[employeeId];\n\n        // Delete previous token allocations\n        address[] memory previousAllowedTokenAddresses = employee.allocationTokenAddresses;\n        for (uint256 j = 0; j < previousAllowedTokenAddresses.length; j++) {\n            delete employee.allocationTokens[previousAllowedTokenAddresses[j]];\n        }\n        delete employee.allocationTokenAddresses;\n\n        // Set distributions only if given tokens are allowed\n        for (uint256 i = 0; i < _tokens.length; i++) {\n            employee.allocationTokenAddresses.push(_tokens[i]);\n            employee.allocationTokens[_tokens[i]] = _distribution[i];\n        }\n\n        _ensureEmployeeTokenAllocationsIsValid(employee);\n        emit DetermineAllocation(employeeId);\n    }\n\n    /**\n     * @notice Request your `_type == 0 ? 'salary' : _type == 1 ? 'reimbursements' : 'bonus'`\n     * @dev Reverts if no payments were made.\n     *      Initialization check is implicitly provided by `employeeMatches` as new employees can\n     *      only be added via `addEmployee(),` which requires initialization.\n     *      As the employee is allowed to call this, we enforce non-reentrancy.\n     * @param _type Payment type being requested (Payroll, Reimbursement or Bonus)\n     * @param _requestedAmount Requested amount to pay for the payment type. Must be less than or equal to total owed amount for the payment type, or zero to request all.\n     * @param _minRates Array of employee's minimum acceptable rates for their allowed payment tokens\n     */\n    function payday(PaymentType _type, uint256 _requestedAmount, uint256[] _minRates) external employeeMatches nonReentrant {\n        uint256 paymentAmount;\n        uint256 employeeId = employeeIds[msg.sender];\n        Employee storage employee = employees[employeeId];\n        _ensureEmployeeTokenAllocationsIsValid(employee);\n        require(_minRates.length == 0 || _minRates.length == employee.allocationTokenAddresses.length, ERROR_MIN_RATES_MISMATCH);\n\n        // Do internal employee accounting\n        if (_type == PaymentType.Payroll) {\n            // Salary is capped here to avoid reverting at this point if it becomes too big\n            // (so employees aren't DDOSed if their salaries get too large)\n            // If we do use a capped value, the employee's lastPayroll date will be adjusted accordingly\n            uint256 totalOwedSalary = _getTotalOwedCappedSalary(employee);\n            paymentAmount = _ensurePaymentAmount(totalOwedSalary, _requestedAmount);\n            _updateEmployeeAccountingBasedOnPaidSalary(employee, paymentAmount);\n        } else if (_type == PaymentType.Reimbursement) {\n            uint256 owedReimbursements = employee.reimbursements;\n            paymentAmount = _ensurePaymentAmount(owedReimbursements, _requestedAmount);\n            employee.reimbursements = owedReimbursements.sub(paymentAmount);\n        } else if (_type == PaymentType.Bonus) {\n            uint256 owedBonusAmount = employee.bonus;\n            paymentAmount = _ensurePaymentAmount(owedBonusAmount, _requestedAmount);\n            employee.bonus = owedBonusAmount.sub(paymentAmount);\n        } else {\n            revert(ERROR_INVALID_PAYMENT_TYPE);\n        }\n\n        // Actually transfer the owed funds\n        require(_transferTokensAmount(employeeId, _type, paymentAmount, _minRates), ERROR_NOTHING_PAID);\n        _removeEmployeeIfTerminatedAndPaidOut(employeeId);\n    }\n\n    // Forwarding fns\n\n    /**\n     * @dev IForwarder interface conformance. Tells whether the Payroll app is a forwarder or not.\n     * @return Always true\n     */\n    function isForwarder() external pure returns (bool) {\n        return true;\n    }\n\n    /**\n     * @notice Execute desired action as an active employee\n     * @dev IForwarder interface conformance. Allows active employees to run EVMScripts in the context of the Payroll app.\n     * @param _evmScript Script being executed\n     */\n    function forward(bytes _evmScript) public {\n        require(canForward(msg.sender, _evmScript), ERROR_CAN_NOT_FORWARD);\n        bytes memory input = new bytes(0); // TODO: Consider input for this\n\n        // Add the Finance app to the blacklist to disallow employees from executing actions on the\n        // Finance app from Payroll's context (since Payroll requires permissions on Finance)\n        address[] memory blacklist = new address[](1);\n        blacklist[0] = address(finance);\n\n        runScript(_evmScript, input, blacklist);\n    }\n\n    /**\n     * @dev IForwarder interface conformance. Tells whether a given address can forward actions or not.\n     * @param _sender Address of the account intending to forward an action\n     * @return True if the given address is an active employee, false otherwise\n     */\n    function canForward(address _sender, bytes) public view returns (bool) {\n        return _isEmployeeIdActive(employeeIds[_sender]);\n    }\n\n    // Getter fns\n\n    /**\n     * @dev Return employee's identifier by their account address\n     * @param _accountAddress Employee's address to receive payments\n     * @return Employee's identifier\n     */\n    function getEmployeeIdByAddress(address _accountAddress) public view returns (uint256) {\n        require(employeeIds[_accountAddress] != uint256(0), ERROR_EMPLOYEE_DOESNT_EXIST);\n        return employeeIds[_accountAddress];\n    }\n\n    /**\n     * @dev Return all information for employee by their ID\n     * @param _employeeId Employee's identifier\n     * @return Employee's address to receive payments\n     * @return Employee's salary, per second in denomination token\n     * @return Employee's accrued salary\n     * @return Employee's bonus amount\n     * @return Employee's reimbursements amount\n     * @return Employee's last payment date\n     * @return Employee's termination date (max uint64 if none)\n     * @return Employee's allowed payment tokens\n     */\n    function getEmployee(uint256 _employeeId)\n        public\n        view\n        employeeIdExists(_employeeId)\n        returns (\n            address accountAddress,\n            uint256 denominationSalary,\n            uint256 accruedSalary,\n            uint256 bonus,\n            uint256 reimbursements,\n            uint64 lastPayroll,\n            uint64 endDate,\n            address[] allocationTokens\n        )\n    {\n        Employee storage employee = employees[_employeeId];\n\n        accountAddress = employee.accountAddress;\n        denominationSalary = employee.denominationTokenSalary;\n        accruedSalary = employee.accruedSalary;\n        bonus = employee.bonus;\n        reimbursements = employee.reimbursements;\n        lastPayroll = employee.lastPayroll;\n        endDate = employee.endDate;\n        allocationTokens = employee.allocationTokenAddresses;\n    }\n\n    /**\n     * @dev Get owed salary since last payroll for an employee. It will take into account the accrued salary as well.\n     *      The result will be capped to max uint256 to avoid having an overflow.\n     * @return Employee's total owed salary: current owed payroll since the last payroll date, plus the accrued salary.\n     */\n    function getTotalOwedSalary(uint256 _employeeId) public view employeeIdExists(_employeeId) returns (uint256) {\n        return _getTotalOwedCappedSalary(employees[_employeeId]);\n    }\n\n    /**\n     * @dev Get an employee's payment allocation for a token\n     * @param _employeeId Employee's identifier\n     * @param _token Token to query the payment allocation for\n     * @return Employee's payment allocation for the token being queried\n     */\n    function getAllocation(uint256 _employeeId, address _token) public view employeeIdExists(_employeeId) returns (uint256) {\n        return employees[_employeeId].allocationTokens[_token];\n    }\n\n    /**\n     * @dev Check if a token is allowed to be used for payments\n     * @param _token Address of the token to be checked\n     * @return True if the given token is allowed, false otherwise\n     */\n    function isTokenAllowed(address _token) public view isInitialized returns (bool) {\n        return allowedTokens[_token];\n    }\n\n    // Internal fns\n\n    /**\n     * @dev Set the price feed used for exchange rates\n     * @param _feed Address of the new price feed instance\n     */\n    function _setPriceFeed(IFeed _feed) internal {\n        require(isContract(_feed), ERROR_FEED_NOT_CONTRACT);\n        feed = _feed;\n        emit SetPriceFeed(feed);\n    }\n\n    /**\n     * @dev Set the exchange rate expiry time in seconds.\n     *      Exchange rates older than the given value won't be accepted for payments and will cause\n     *      payouts to revert.\n     * @param _time The expiration time in seconds for exchange rates\n     */\n    function _setRateExpiryTime(uint64 _time) internal {\n        // Require a sane minimum for the rate expiry time\n        require(_time >= MIN_RATE_EXPIRY, ERROR_EXPIRY_TIME_TOO_SHORT);\n        rateExpiryTime = _time;\n        emit SetRateExpiryTime(rateExpiryTime);\n    }\n\n    /**\n     * @dev Add a new employee to Payroll\n     * @param _accountAddress Employee's address to receive payroll\n     * @param _initialDenominationSalary Employee's salary, per second in denomination token\n     * @param _startDate Employee's starting timestamp in seconds\n     * @param _role Employee's role\n     */\n    function _addEmployee(address _accountAddress, uint256 _initialDenominationSalary, uint64 _startDate, string _role) internal {\n        uint256 employeeId = nextEmployee++;\n\n        _setEmployeeAddress(employeeId, _accountAddress);\n\n        Employee storage employee = employees[employeeId];\n        employee.denominationTokenSalary = _initialDenominationSalary;\n        employee.lastPayroll = _startDate;\n        employee.endDate = MAX_UINT64;\n\n        emit AddEmployee(employeeId, _accountAddress, _initialDenominationSalary, _startDate, _role);\n    }\n\n    /**\n     * @dev Add amount to an employee's bonuses\n     * @param _employeeId Employee's identifier\n     * @param _amount Amount be added to the employee's bonuses in denomination token\n     */\n    function _addBonus(uint256 _employeeId, uint256 _amount) internal {\n        Employee storage employee = employees[_employeeId];\n        employee.bonus = employee.bonus.add(_amount);\n        emit AddEmployeeBonus(_employeeId, _amount);\n    }\n\n    /**\n     * @dev Add amount to an employee's reimbursements\n     * @param _employeeId Employee's identifier\n     * @param _amount Amount be added to the employee's reimbursements in denomination token\n     */\n    function _addReimbursement(uint256 _employeeId, uint256 _amount) internal {\n        Employee storage employee = employees[_employeeId];\n        employee.reimbursements = employee.reimbursements.add(_amount);\n        emit AddEmployeeReimbursement(_employeeId, _amount);\n    }\n\n    /**\n     * @dev Add amount to an employee's accrued salary\n     * @param _employeeId Employee's identifier\n     * @param _amount Amount be added to the employee's accrued salary in denomination token\n     */\n    function _addAccruedSalary(uint256 _employeeId, uint256 _amount) internal {\n        Employee storage employee = employees[_employeeId];\n        employee.accruedSalary = employee.accruedSalary.add(_amount);\n        emit AddEmployeeAccruedSalary(_employeeId, _amount);\n    }\n\n    /**\n     * @dev Set an employee's account address\n     * @param _employeeId Employee's identifier\n     * @param _accountAddress Employee's address to receive payroll\n     */\n    function _setEmployeeAddress(uint256 _employeeId, address _accountAddress) internal {\n        // Check address is non-null\n        require(_accountAddress != address(0), ERROR_EMPLOYEE_NULL_ADDRESS);\n        // Check address isn't already being used\n        require(employeeIds[_accountAddress] == uint256(0), ERROR_EMPLOYEE_ALREADY_EXIST);\n\n        employees[_employeeId].accountAddress = _accountAddress;\n\n        // Create IDs mapping\n        employeeIds[_accountAddress] = _employeeId;\n    }\n\n    /**\n     * @dev Terminate employee on end date\n     * @param _employeeId Employee's identifier\n     * @param _endDate Termination timestamp in seconds\n     */\n    function _terminateEmployee(uint256 _employeeId, uint64 _endDate) internal {\n        // Prevent past termination dates\n        require(_endDate >= getTimestamp64(), ERROR_PAST_TERMINATION_DATE);\n        employees[_employeeId].endDate = _endDate;\n        emit TerminateEmployee(_employeeId, _endDate);\n    }\n\n    /**\n     * @dev Loop over allowed tokens to send requested amount to the employee in their desired allocation\n     * @param _employeeId Employee's identifier\n     * @param _totalAmount Total amount to be transferred to the employee distributed in accordance to the employee's token allocation.\n     * @param _type Payment type being transferred (Payroll, Reimbursement or Bonus)\n     * @param _minRates Array of employee's minimum acceptable rates for their allowed payment tokens\n     * @return True if there was at least one token transfer\n     */\n    function _transferTokensAmount(uint256 _employeeId, PaymentType _type, uint256 _totalAmount, uint256[] _minRates) internal returns (bool somethingPaid) {\n        if (_totalAmount == 0) {\n            return false;\n        }\n\n        Employee storage employee = employees[_employeeId];\n        address employeeAddress = employee.accountAddress;\n        string memory paymentReference = _paymentReferenceFor(_type);\n\n        address[] storage allocationTokenAddresses = employee.allocationTokenAddresses;\n        for (uint256 i = 0; i < allocationTokenAddresses.length; i++) {\n            address token = allocationTokenAddresses[i];\n            uint256 tokenAllocation = employee.allocationTokens[token];\n            if (tokenAllocation != uint256(0)) {\n                // Get the exchange rate for the payout token in denomination token,\n                // as we do accounting in denomination tokens\n                uint256 exchangeRate = _getExchangeRateInDenominationToken(token);\n                require(_minRates.length > 0 ? exchangeRate >= _minRates[i] : exchangeRate > 0, ERROR_EXCHANGE_RATE_TOO_LOW);\n\n                // Convert amount (in denomination tokens) to payout token and apply allocation\n                uint256 tokenAmount = _totalAmount.mul(exchangeRate).mul(tokenAllocation);\n                // Divide by 100 for the allocation percentage and by the exchange rate precision\n                tokenAmount = tokenAmount.div(100).div(feed.ratePrecision());\n\n                // Finance reverts if the payment wasn't possible\n                finance.newImmediatePayment(token, employeeAddress, tokenAmount, paymentReference);\n                emit SendPayment(_employeeId, employeeAddress, token, tokenAmount, exchangeRate, paymentReference);\n                somethingPaid = true;\n            }\n        }\n    }\n\n    /**\n     * @dev Remove employee if there are no owed funds and employee's end date has been reached\n     * @param _employeeId Employee's identifier\n     */\n    function _removeEmployeeIfTerminatedAndPaidOut(uint256 _employeeId) internal {\n        Employee storage employee = employees[_employeeId];\n\n        if (\n            employee.lastPayroll == employee.endDate &&\n            (employee.accruedSalary == 0 && employee.bonus == 0 && employee.reimbursements == 0)\n        ) {\n            delete employeeIds[employee.accountAddress];\n            delete employees[_employeeId];\n        }\n    }\n\n    /**\n     * @dev Updates the accrued salary and payroll date of an employee based on a payment amount and\n     *      their currently owed salary since last payroll date\n     * @param _employee Employee struct in storage\n     * @param _paymentAmount Amount being paid to the employee\n     */\n    function _updateEmployeeAccountingBasedOnPaidSalary(Employee storage _employee, uint256 _paymentAmount) internal {\n        uint256 accruedSalary = _employee.accruedSalary;\n\n        if (_paymentAmount <= accruedSalary) {\n            // Employee is only cashing out some previously owed salary so we don't need to update\n            // their last payroll date\n            // No need to use SafeMath as we already know _paymentAmount <= accruedSalary\n            _employee.accruedSalary = accruedSalary - _paymentAmount;\n            return;\n        }\n\n        // Employee is cashing out some of their currently owed salary so their last payroll date\n        // needs to be modified based on the amount of salary paid\n        uint256 currentSalaryPaid = _paymentAmount;\n        if (accruedSalary > 0) {\n            // Employee is cashing out a mixed amount between previous and current owed salaries;\n            // first use up their accrued salary\n            // No need to use SafeMath here as we already know _paymentAmount > accruedSalary\n            currentSalaryPaid = _paymentAmount - accruedSalary;\n            // We finally need to clear their accrued salary\n            _employee.accruedSalary = 0;\n        }\n\n        uint256 salary = _employee.denominationTokenSalary;\n        uint256 timeDiff = currentSalaryPaid.div(salary);\n\n        // If they're being paid an amount that doesn't match perfectly with the adjusted time\n        // (up to a seconds' worth of salary), add the second and put the extra remaining salary\n        // into their accrued salary\n        uint256 extraSalary = currentSalaryPaid % salary;\n        if (extraSalary > 0) {\n            timeDiff = timeDiff.add(1);\n            _employee.accruedSalary = salary - extraSalary;\n        }\n\n        uint256 lastPayrollDate = uint256(_employee.lastPayroll).add(timeDiff);\n        // Even though this function should never receive a currentSalaryPaid value that would\n        // result in the lastPayrollDate being higher than the current time,\n        // let's double check to be safe\n        require(lastPayrollDate <= uint256(getTimestamp64()), ERROR_LAST_PAYROLL_DATE_TOO_BIG);\n        // Already know lastPayrollDate must fit in uint64 from above\n        _employee.lastPayroll = uint64(lastPayrollDate);\n    }\n\n    /**\n     * @dev Tell whether an employee is registered in this Payroll or not\n     * @param _employeeId Employee's identifier\n     * @return True if the given employee ID belongs to an registered employee, false otherwise\n     */\n    function _employeeExists(uint256 _employeeId) internal view returns (bool) {\n        return employees[_employeeId].accountAddress != address(0);\n    }\n\n    /**\n     * @dev Tell whether an employee has a valid token allocation or not.\n     *      A valid allocation is one that sums to 100 and only includes allowed tokens.\n     * @param _employee Employee struct in storage\n     * @return Reverts if employee's allocation is invalid\n     */\n    function _ensureEmployeeTokenAllocationsIsValid(Employee storage _employee) internal view {\n        uint256 sum = 0;\n        address[] memory allocationTokenAddresses = _employee.allocationTokenAddresses;\n        for (uint256 i = 0; i < allocationTokenAddresses.length; i++) {\n            address token = allocationTokenAddresses[i];\n            require(allowedTokens[token], ERROR_NOT_ALLOWED_TOKEN);\n            sum = sum.add(_employee.allocationTokens[token]);\n        }\n        require(sum == 100, ERROR_DISTRIBUTION_NOT_FULL);\n    }\n\n    /**\n     * @dev Tell whether an employee is still active or not\n     * @param _employee Employee struct in storage\n     * @return True if the employee exists and has an end date that has not been reached yet, false otherwise\n     */\n    function _isEmployeeActive(Employee storage _employee) internal view returns (bool) {\n        return _employee.endDate >= getTimestamp64();\n    }\n\n    /**\n     * @dev Tell whether an employee id is still active or not\n     * @param _employeeId Employee's identifier\n     * @return True if the employee exists and has an end date that has not been reached yet, false otherwise\n     */\n    function _isEmployeeIdActive(uint256 _employeeId) internal view returns (bool) {\n        return _isEmployeeActive(employees[_employeeId]);\n    }\n\n    /**\n     * @dev Get exchange rate for a token based on the denomination token.\n     *      As an example, if the denomination token was USD and ETH's price was 100USD,\n     *      this would return 0.01 * precision rate for ETH.\n     * @param _token Token to get price of in denomination tokens\n     * @return Exchange rate (multiplied by the PPF rate precision)\n     */\n    function _getExchangeRateInDenominationToken(address _token) internal view returns (uint256) {\n        // xrt is the number of `_token` that can be exchanged for one `denominationToken`\n        (uint128 xrt, uint64 when) = feed.get(\n            denominationToken,  // Base (e.g. USD)\n            _token              // Quote (e.g. ETH)\n        );\n\n        // Check the price feed is recent enough\n        if (getTimestamp64().sub(when) >= rateExpiryTime) {\n            return 0;\n        }\n\n        return uint256(xrt);\n    }\n\n    /**\n     * @dev Get owed salary since last payroll for an employee\n     * @param _employee Employee struct in storage\n     * @param _capped Safely cap the owed salary at max uint\n     * @return Owed salary in denomination tokens since last payroll for the employee.\n     *         If _capped is false, it reverts in case of an overflow.\n     */\n    function _getOwedSalarySinceLastPayroll(Employee storage _employee, bool _capped) internal view returns (uint256) {\n        uint256 timeDiff = _getOwedPayrollPeriod(_employee);\n        if (timeDiff == 0) {\n            return 0;\n        }\n        uint256 salary = _employee.denominationTokenSalary;\n\n        if (_capped) {\n            // Return max uint if the result overflows\n            uint256 result = salary * timeDiff;\n            return (result / timeDiff != salary) ? MAX_UINT256 : result;\n        } else {\n            return salary.mul(timeDiff);\n        }\n    }\n\n    /**\n     * @dev Get owed payroll period for an employee\n     * @param _employee Employee struct in storage\n     * @return Owed time in seconds since the employee's last payroll date\n     */\n    function _getOwedPayrollPeriod(Employee storage _employee) internal view returns (uint256) {\n        // Get the min of current date and termination date\n        uint64 date = _isEmployeeActive(_employee) ? getTimestamp64() : _employee.endDate;\n\n        // Make sure we don't revert if we try to get the owed salary for an employee whose last\n        // payroll date is now or in the future\n        // This can happen either by adding new employees with start dates in the future, to allow\n        // us to change their salary before their start date, or by terminating an employee and\n        // paying out their full owed salary\n        if (date <= _employee.lastPayroll) {\n            return 0;\n        }\n\n        // Return time diff in seconds, no need to use SafeMath as the underflow was covered by the previous check\n        return uint256(date - _employee.lastPayroll);\n    }\n\n    /**\n     * @dev Get owed salary since last payroll for an employee. It will take into account the accrued salary as well.\n     *      The result will be capped to max uint256 to avoid having an overflow.\n     * @param _employee Employee struct in storage\n     * @return Employee's total owed salary: current owed payroll since the last payroll date, plus the accrued salary.\n     */\n    function _getTotalOwedCappedSalary(Employee storage _employee) internal view returns (uint256) {\n        uint256 currentOwedSalary = _getOwedSalarySinceLastPayroll(_employee, true); // cap amount\n        uint256 totalOwedSalary = currentOwedSalary + _employee.accruedSalary;\n        if (totalOwedSalary < currentOwedSalary) {\n            totalOwedSalary = MAX_UINT256;\n        }\n        return totalOwedSalary;\n    }\n\n    /**\n     * @dev Get payment reference for a given payment type\n     * @param _type Payment type to query the reference of\n     * @return Payment reference for the given payment type\n     */\n    function _paymentReferenceFor(PaymentType _type) internal pure returns (string memory) {\n        if (_type == PaymentType.Payroll) {\n            return \"Employee salary\";\n        } else if (_type == PaymentType.Reimbursement) {\n            return \"Employee reimbursement\";\n        } if (_type == PaymentType.Bonus) {\n            return \"Employee bonus\";\n        }\n        revert(ERROR_INVALID_PAYMENT_TYPE);\n    }\n\n    function _ensurePaymentAmount(uint256 _owedAmount, uint256 _requestedAmount) private pure returns (uint256) {\n        require(_owedAmount > 0, ERROR_NOTHING_PAID);\n        require(_owedAmount >= _requestedAmount, ERROR_INVALID_REQUESTED_AMOUNT);\n        return _requestedAmount > 0 ? _requestedAmount : _owedAmount;\n    }\n}\n",
  "sourcePath": "/Users/facu/Documents/work/aragon/dev/aragon-apps/future-apps/payroll/contracts/Payroll.sol",
  "ast": {
    "absolutePath": "/Users/facu/Documents/work/aragon/dev/aragon-apps/future-apps/payroll/contracts/Payroll.sol",
    "exportedSymbols": {
      "Payroll": [
        1984
      ]
    },
    "id": 1985,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 1,
        "literals": [
          "solidity",
          "0.4",
          ".24"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:0"
      },
      {
        "absolutePath": "@aragon/os/contracts/apps/AragonApp.sol",
        "file": "@aragon/os/contracts/apps/AragonApp.sol",
        "id": 2,
        "nodeType": "ImportDirective",
        "scope": 1985,
        "sourceUnit": 10490,
        "src": "25:49:0",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@aragon/os/contracts/common/EtherTokenConstant.sol",
        "file": "@aragon/os/contracts/common/EtherTokenConstant.sol",
        "id": 3,
        "nodeType": "ImportDirective",
        "scope": 1985,
        "sourceUnit": 10663,
        "src": "75:60:0",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@aragon/os/contracts/common/IsContract.sol",
        "file": "@aragon/os/contracts/common/IsContract.sol",
        "id": 4,
        "nodeType": "ImportDirective",
        "scope": 1985,
        "sourceUnit": 10839,
        "src": "136:52:0",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@aragon/os/contracts/common/IForwarder.sol",
        "file": "@aragon/os/contracts/common/IForwarder.sol",
        "id": 5,
        "nodeType": "ImportDirective",
        "scope": 1985,
        "sourceUnit": 10685,
        "src": "189:52:0",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@aragon/os/contracts/lib/math/SafeMath.sol",
        "file": "@aragon/os/contracts/lib/math/SafeMath.sol",
        "id": 6,
        "nodeType": "ImportDirective",
        "scope": 1985,
        "sourceUnit": 14065,
        "src": "243:52:0",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@aragon/os/contracts/lib/math/SafeMath64.sol",
        "file": "@aragon/os/contracts/lib/math/SafeMath64.sol",
        "id": 7,
        "nodeType": "ImportDirective",
        "scope": 1985,
        "sourceUnit": 14207,
        "src": "296:54:0",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@aragon/ppf-contracts/contracts/IFeed.sol",
        "file": "@aragon/ppf-contracts/contracts/IFeed.sol",
        "id": 8,
        "nodeType": "ImportDirective",
        "scope": 1985,
        "sourceUnit": 14314,
        "src": "352:51:0",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@aragon/apps-finance/contracts/Finance.sol",
        "file": "@aragon/apps-finance/contracts/Finance.sol",
        "id": 9,
        "nodeType": "ImportDirective",
        "scope": 1985,
        "sourceUnit": 5529,
        "src": "404:52:0",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 10,
              "name": "EtherTokenConstant",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 10662,
              "src": "528:18:0",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_EtherTokenConstant_$10662",
                "typeString": "contract EtherTokenConstant"
              }
            },
            "id": 11,
            "nodeType": "InheritanceSpecifier",
            "src": "528:18:0"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 12,
              "name": "IForwarder",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 10684,
              "src": "548:10:0",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IForwarder_$10684",
                "typeString": "contract IForwarder"
              }
            },
            "id": 13,
            "nodeType": "InheritanceSpecifier",
            "src": "548:10:0"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 14,
              "name": "IsContract",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 10838,
              "src": "560:10:0",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IsContract_$10838",
                "typeString": "contract IsContract"
              }
            },
            "id": 15,
            "nodeType": "InheritanceSpecifier",
            "src": "560:10:0"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 16,
              "name": "AragonApp",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 10489,
              "src": "572:9:0",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_AragonApp_$10489",
                "typeString": "contract AragonApp"
              }
            },
            "id": 17,
            "nodeType": "InheritanceSpecifier",
            "src": "572:9:0"
          }
        ],
        "contractDependencies": [
          9577,
          10365,
          10489,
          10502,
          10662,
          10684,
          10712,
          10810,
          10838,
          10871,
          10908,
          11200,
          11422,
          11823,
          11850,
          13114
        ],
        "contractKind": "contract",
        "documentation": "@title Payroll in multiple currencies",
        "fullyImplemented": true,
        "id": 1984,
        "linearizedBaseContracts": [
          1984,
          10489,
          9577,
          11823,
          13114,
          11850,
          10908,
          11422,
          10838,
          10684,
          10662,
          10712,
          10502,
          10871,
          10810,
          11200,
          10365
        ],
        "name": "Payroll",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 20,
            "libraryName": {
              "contractScope": null,
              "id": 18,
              "name": "SafeMath",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 14064,
              "src": "594:8:0",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_SafeMath_$14064",
                "typeString": "library SafeMath"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "588:27:0",
            "typeName": {
              "id": 19,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "607:7:0",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            }
          },
          {
            "id": 23,
            "libraryName": {
              "contractScope": null,
              "id": 21,
              "name": "SafeMath64",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 14206,
              "src": "626:10:0",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_SafeMath64_$14206",
                "typeString": "library SafeMath64"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "620:28:0",
            "typeName": {
              "id": 22,
              "name": "uint64",
              "nodeType": "ElementaryTypeName",
              "src": "641:6:0",
              "typeDescriptions": {
                "typeIdentifier": "t_uint64",
                "typeString": "uint64"
              }
            }
          },
          {
            "constant": true,
            "id": 26,
            "name": "ADD_EMPLOYEE_ROLE",
            "nodeType": "VariableDeclaration",
            "scope": 1984,
            "src": "1427:110:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 24,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "1427:7:0",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "307839656364633363363337313662343564303735366565636535666531363134636165313838396563356131636536326233313237633166316631363135643665",
              "id": 25,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1471:66:0",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_71828984908844238555949328342089860675847136120918376188830129238999052672366_by_1",
                "typeString": "int_const 7182...(69 digits omitted)...2366"
              },
              "value": "0x9ecdc3c63716b45d0756eece5fe1614cae1889ec5a1ce62b3127c1f1f1615d6e"
            },
            "visibility": "public"
          },
          {
            "constant": true,
            "id": 29,
            "name": "TERMINATE_EMPLOYEE_ROLE",
            "nodeType": "VariableDeclaration",
            "scope": 1984,
            "src": "1543:116:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 27,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "1543:7:0",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "307836396336376639313464313262363434306537646466303139363132313438313864393135386662636231393231316530666634323830306664656139323432",
              "id": 28,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1593:66:0",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_47843565259164144133809461170372969702816497096869277417040675769185680921154_by_1",
                "typeString": "int_const 4784...(69 digits omitted)...1154"
              },
              "value": "0x69c67f914d12b6440e7ddf01961214818d9158fbcb19211e0ff42800fdea9242"
            },
            "visibility": "public"
          },
          {
            "constant": true,
            "id": 32,
            "name": "SET_EMPLOYEE_SALARY_ROLE",
            "nodeType": "VariableDeclaration",
            "scope": 1984,
            "src": "1665:117:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 30,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "1665:7:0",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "307865613961633635303138646132343231636634313965653231353233373134343063303832363761313933613333636363316533393534356431393765343464",
              "id": 31,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1716:66:0",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_106114669721649837030210016195818868806878882966462230778670002579541547541581_by_1",
                "typeString": "int_const 1061...(70 digits omitted)...1581"
              },
              "value": "0xea9ac65018da2421cf419ee2152371440c08267a193a33ccc1e39545d197e44d"
            },
            "visibility": "public"
          },
          {
            "constant": true,
            "id": 35,
            "name": "ADD_BONUS_ROLE",
            "nodeType": "VariableDeclaration",
            "scope": 1984,
            "src": "1788:107:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 33,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "1788:7:0",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "307863656361376532663565623734396138376161663638663366373664366239323531616132663436303066313366393363356134616466376137326466346165",
              "id": 34,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1829:66:0",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_93534220812370054220978265633527830468714367242977563805072917605995456099502_by_1",
                "typeString": "int_const 9353...(69 digits omitted)...9502"
              },
              "value": "0xceca7e2f5eb749a87aaf68f3f76d6b9251aa2f4600f13f93c5a4adf7a72df4ae"
            },
            "visibility": "public"
          },
          {
            "constant": true,
            "id": 38,
            "name": "ADD_REIMBURSEMENT_ROLE",
            "nodeType": "VariableDeclaration",
            "scope": 1984,
            "src": "1901:115:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 36,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "1901:7:0",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "307839303639386239643534343237663165343136333630323530313733303962646231623535333230646139363063383834356261623061353034623031613136",
              "id": 37,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1950:66:0",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_65319532722119508507784416685044973991992190640648452491307818028309280725526_by_1",
                "typeString": "int_const 6531...(69 digits omitted)...5526"
              },
              "value": "0x90698b9d54427f1e41636025017309bdb1b55320da960c8845bab0a504b01a16"
            },
            "visibility": "public"
          },
          {
            "constant": true,
            "id": 41,
            "name": "MANAGE_ALLOWED_TOKENS_ROLE",
            "nodeType": "VariableDeclaration",
            "scope": 1984,
            "src": "2022:119:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 39,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "2022:7:0",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "307830626533343938376334353730306565336661653863353565323730343138626139303333333764656363366261636231383739353034626539333331633036",
              "id": 40,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "2075:66:0",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_5377023105873739678085461058163298743547224377491716976682656041718999358470_by_1",
                "typeString": "int_const 5377...(68 digits omitted)...8470"
              },
              "value": "0x0be34987c45700ee3fae8c55e270418ba903337decc6bacb1879504be9331c06"
            },
            "visibility": "public"
          },
          {
            "constant": true,
            "id": 44,
            "name": "MODIFY_PRICE_FEED_ROLE",
            "nodeType": "VariableDeclaration",
            "scope": 1984,
            "src": "2147:115:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 42,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "2147:7:0",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "307837343335306566626362613862383533343163356262663730636333346532613538356663313436333532343737336131326661306137316434656239333032",
              "id": 43,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "2196:66:0",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_52562036742935426542814051682274598831193441213500536100195688242734636438274_by_1",
                "typeString": "int_const 5256...(69 digits omitted)...8274"
              },
              "value": "0x74350efbcba8b85341c5bbf70cc34e2a585fc1463524773a12fa0a71d4eb9302"
            },
            "visibility": "public"
          },
          {
            "constant": true,
            "id": 47,
            "name": "MODIFY_RATE_EXPIRY_ROLE",
            "nodeType": "VariableDeclaration",
            "scope": 1984,
            "src": "2268:116:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 45,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "2268:7:0",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "307837396665393839613838393930363064666264616262313734656262393636313666613966316439646164643733396638643831346362616234353234303465",
              "id": 46,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "2318:66:0",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_55179687064690863465427953388742629249966644689543679381930473656019565297742_by_1",
                "typeString": "int_const 5517...(69 digits omitted)...7742"
              },
              "value": "0x79fe989a8899060dfbdabb174ebb96616fa9f1d9dadd739f8d814cbab452404e"
            },
            "visibility": "public"
          },
          {
            "constant": true,
            "id": 50,
            "name": "MAX_ALLOWED_TOKENS",
            "nodeType": "VariableDeclaration",
            "scope": 1984,
            "src": "2391:49:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 48,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "2391:7:0",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "3230",
              "id": 49,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "2438:2:0",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_20_by_1",
                "typeString": "int_const 20"
              },
              "value": "20"
            },
            "visibility": "internal"
          },
          {
            "constant": true,
            "id": 55,
            "name": "MIN_RATE_EXPIRY",
            "nodeType": "VariableDeclaration",
            "scope": 1984,
            "src": "2484:60:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint64",
              "typeString": "uint64"
            },
            "typeName": {
              "id": 51,
              "name": "uint64",
              "nodeType": "ElementaryTypeName",
              "src": "2484:6:0",
              "typeDescriptions": {
                "typeIdentifier": "t_uint64",
                "typeString": "uint64"
              }
            },
            "value": {
              "argumentTypes": null,
              "arguments": [
                {
                  "argumentTypes": null,
                  "hexValue": "31",
                  "id": 53,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "kind": "number",
                  "lValueRequested": false,
                  "nodeType": "Literal",
                  "src": "2534:9:0",
                  "subdenomination": "minutes",
                  "typeDescriptions": {
                    "typeIdentifier": "t_rational_60_by_1",
                    "typeString": "int_const 60"
                  },
                  "value": "1"
                }
              ],
              "expression": {
                "argumentTypes": [
                  {
                    "typeIdentifier": "t_rational_60_by_1",
                    "typeString": "int_const 60"
                  }
                ],
                "id": 52,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "lValueRequested": false,
                "nodeType": "ElementaryTypeNameExpression",
                "src": "2527:6:0",
                "typeDescriptions": {
                  "typeIdentifier": "t_type$_t_uint64_$",
                  "typeString": "type(uint64)"
                },
                "typeName": "uint64"
              },
              "id": 54,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "typeConversion",
              "lValueRequested": false,
              "names": [],
              "nodeType": "FunctionCall",
              "src": "2527:17:0",
              "typeDescriptions": {
                "typeIdentifier": "t_uint64",
                "typeString": "uint64"
              }
            },
            "visibility": "internal"
          },
          {
            "constant": true,
            "id": 61,
            "name": "MAX_UINT256",
            "nodeType": "VariableDeclaration",
            "scope": 1984,
            "src": "2625:51:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 56,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "2625:7:0",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "argumentTypes": null,
              "arguments": [
                {
                  "argumentTypes": null,
                  "id": 59,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "lValueRequested": false,
                  "nodeType": "UnaryOperation",
                  "operator": "-",
                  "prefix": true,
                  "src": "2673:2:0",
                  "subExpression": {
                    "argumentTypes": null,
                    "hexValue": "31",
                    "id": 58,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "2674:1:0",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_1_by_1",
                      "typeString": "int_const 1"
                    },
                    "value": "1"
                  },
                  "typeDescriptions": {
                    "typeIdentifier": "t_rational_-1_by_1",
                    "typeString": "int_const -1"
                  }
                }
              ],
              "expression": {
                "argumentTypes": [
                  {
                    "typeIdentifier": "t_rational_-1_by_1",
                    "typeString": "int_const -1"
                  }
                ],
                "id": 57,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "lValueRequested": false,
                "nodeType": "ElementaryTypeNameExpression",
                "src": "2665:7:0",
                "typeDescriptions": {
                  "typeIdentifier": "t_type$_t_uint256_$",
                  "typeString": "type(uint256)"
                },
                "typeName": "uint256"
              },
              "id": 60,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "typeConversion",
              "lValueRequested": false,
              "names": [],
              "nodeType": "FunctionCall",
              "src": "2665:11:0",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "visibility": "internal"
          },
          {
            "constant": true,
            "id": 67,
            "name": "MAX_UINT64",
            "nodeType": "VariableDeclaration",
            "scope": 1984,
            "src": "2682:48:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint64",
              "typeString": "uint64"
            },
            "typeName": {
              "id": 62,
              "name": "uint64",
              "nodeType": "ElementaryTypeName",
              "src": "2682:6:0",
              "typeDescriptions": {
                "typeIdentifier": "t_uint64",
                "typeString": "uint64"
              }
            },
            "value": {
              "argumentTypes": null,
              "arguments": [
                {
                  "argumentTypes": null,
                  "id": 65,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "lValueRequested": false,
                  "nodeType": "UnaryOperation",
                  "operator": "-",
                  "prefix": true,
                  "src": "2727:2:0",
                  "subExpression": {
                    "argumentTypes": null,
                    "hexValue": "31",
                    "id": 64,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "2728:1:0",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_1_by_1",
                      "typeString": "int_const 1"
                    },
                    "value": "1"
                  },
                  "typeDescriptions": {
                    "typeIdentifier": "t_rational_-1_by_1",
                    "typeString": "int_const -1"
                  }
                }
              ],
              "expression": {
                "argumentTypes": [
                  {
                    "typeIdentifier": "t_rational_-1_by_1",
                    "typeString": "int_const -1"
                  }
                ],
                "id": 63,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "lValueRequested": false,
                "nodeType": "ElementaryTypeNameExpression",
                "src": "2720:6:0",
                "typeDescriptions": {
                  "typeIdentifier": "t_type$_t_uint64_$",
                  "typeString": "type(uint64)"
                },
                "typeName": "uint64"
              },
              "id": 66,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "typeConversion",
              "lValueRequested": false,
              "names": [],
              "nodeType": "FunctionCall",
              "src": "2720:10:0",
              "typeDescriptions": {
                "typeIdentifier": "t_uint64",
                "typeString": "uint64"
              }
            },
            "visibility": "internal"
          },
          {
            "constant": true,
            "id": 70,
            "name": "ERROR_EMPLOYEE_DOESNT_EXIST",
            "nodeType": "VariableDeclaration",
            "scope": 1984,
            "src": "2737:85:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 68,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "2737:6:0",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "504159524f4c4c5f454d504c4f5945455f444f45534e545f4558495354",
              "id": 69,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "2791:31:0",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_3040532e3b003e5956a88c57b05878bc6423f278034ae52388cd63165fc3e833",
                "typeString": "literal_string \"PAYROLL_EMPLOYEE_DOESNT_EXIST\""
              },
              "value": "PAYROLL_EMPLOYEE_DOESNT_EXIST"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 73,
            "name": "ERROR_NON_ACTIVE_EMPLOYEE",
            "nodeType": "VariableDeclaration",
            "scope": 1984,
            "src": "2828:81:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 71,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "2828:6:0",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "504159524f4c4c5f4e4f4e5f4143544956455f454d504c4f594545",
              "id": 72,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "2880:29:0",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_c682094980d6d373c27c2d307a90340c49b0ecc0d315e2545a5fe5f38cd22281",
                "typeString": "literal_string \"PAYROLL_NON_ACTIVE_EMPLOYEE\""
              },
              "value": "PAYROLL_NON_ACTIVE_EMPLOYEE"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 76,
            "name": "ERROR_SENDER_DOES_NOT_MATCH",
            "nodeType": "VariableDeclaration",
            "scope": 1984,
            "src": "2915:85:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 74,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "2915:6:0",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "504159524f4c4c5f53454e4445525f444f45535f4e4f545f4d41544348",
              "id": 75,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "2969:31:0",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_d92783ff5ae559953bfbd87f56aee966d525be74f6a39bc0866fa203fa3c0f8a",
                "typeString": "literal_string \"PAYROLL_SENDER_DOES_NOT_MATCH\""
              },
              "value": "PAYROLL_SENDER_DOES_NOT_MATCH"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 79,
            "name": "ERROR_FINANCE_NOT_CONTRACT",
            "nodeType": "VariableDeclaration",
            "scope": 1984,
            "src": "3006:83:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 77,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "3006:6:0",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "504159524f4c4c5f46494e414e43455f4e4f545f434f4e5452414354",
              "id": 78,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "3059:30:0",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_d92c79f660c45904491a2e152d329cf0af88eb1d4cc25a3d6e9eb1a904d6c845",
                "typeString": "literal_string \"PAYROLL_FINANCE_NOT_CONTRACT\""
              },
              "value": "PAYROLL_FINANCE_NOT_CONTRACT"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 82,
            "name": "ERROR_TOKEN_ALREADY_SET",
            "nodeType": "VariableDeclaration",
            "scope": 1984,
            "src": "3095:77:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 80,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "3095:6:0",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "504159524f4c4c5f544f4b454e5f414c52454144595f534554",
              "id": 81,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "3145:27:0",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_7e7c4931d53d3a41fb1f6d61fa04c207cf3489ec4abea554460f89237b69ac42",
                "typeString": "literal_string \"PAYROLL_TOKEN_ALREADY_SET\""
              },
              "value": "PAYROLL_TOKEN_ALREADY_SET"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 85,
            "name": "ERROR_MAX_ALLOWED_TOKENS",
            "nodeType": "VariableDeclaration",
            "scope": 1984,
            "src": "3178:79:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 83,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "3178:6:0",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "504159524f4c4c5f4d41585f414c4c4f5745445f544f4b454e53",
              "id": 84,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "3229:28:0",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_6248890f2c0e5a94b2f632d1ea130498e2cd1d7fe8f78f6fd33e1602a4e882c7",
                "typeString": "literal_string \"PAYROLL_MAX_ALLOWED_TOKENS\""
              },
              "value": "PAYROLL_MAX_ALLOWED_TOKENS"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 88,
            "name": "ERROR_MIN_RATES_MISMATCH",
            "nodeType": "VariableDeclaration",
            "scope": 1984,
            "src": "3263:79:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 86,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "3263:6:0",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "504159524f4c4c5f4d494e5f52415445535f4d49534d41544348",
              "id": 87,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "3314:28:0",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_59371e66108cb1395269c6c526f0d6be400c1fc6656273dc7e3b4b831daa386c",
                "typeString": "literal_string \"PAYROLL_MIN_RATES_MISMATCH\""
              },
              "value": "PAYROLL_MIN_RATES_MISMATCH"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 91,
            "name": "ERROR_TOKEN_ALLOCATION_MISMATCH",
            "nodeType": "VariableDeclaration",
            "scope": 1984,
            "src": "3348:93:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 89,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "3348:6:0",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "504159524f4c4c5f544f4b454e5f414c4c4f434154494f4e5f4d49534d41544348",
              "id": 90,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "3406:35:0",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_038fbdf003f0f02882a927a19a4a83f61295ba2b16b03154c04f677baaec410c",
                "typeString": "literal_string \"PAYROLL_TOKEN_ALLOCATION_MISMATCH\""
              },
              "value": "PAYROLL_TOKEN_ALLOCATION_MISMATCH"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 94,
            "name": "ERROR_NOT_ALLOWED_TOKEN",
            "nodeType": "VariableDeclaration",
            "scope": 1984,
            "src": "3447:77:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 92,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "3447:6:0",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "504159524f4c4c5f4e4f545f414c4c4f5745445f544f4b454e",
              "id": 93,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "3497:27:0",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_e8fcfddcb695540943ae2ed4e50145415d7c0b93c25369bc835f6df2d9b3dd7d",
                "typeString": "literal_string \"PAYROLL_NOT_ALLOWED_TOKEN\""
              },
              "value": "PAYROLL_NOT_ALLOWED_TOKEN"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 97,
            "name": "ERROR_DISTRIBUTION_NOT_FULL",
            "nodeType": "VariableDeclaration",
            "scope": 1984,
            "src": "3530:85:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 95,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "3530:6:0",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "504159524f4c4c5f444953545249425554494f4e5f4e4f545f46554c4c",
              "id": 96,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "3584:31:0",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_9bfe203c9c2dccdf906a33d300236c6472ef4e55c862f4f7d82a05d474145ee6",
                "typeString": "literal_string \"PAYROLL_DISTRIBUTION_NOT_FULL\""
              },
              "value": "PAYROLL_DISTRIBUTION_NOT_FULL"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 100,
            "name": "ERROR_INVALID_PAYMENT_TYPE",
            "nodeType": "VariableDeclaration",
            "scope": 1984,
            "src": "3621:83:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 98,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "3621:6:0",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "504159524f4c4c5f494e56414c49445f5041594d454e545f54595045",
              "id": 99,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "3674:30:0",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_fbeb10f9b50b0fb2daf96e799b8fb1a904855b117f7cd54b79ea18fb7f811e60",
                "typeString": "literal_string \"PAYROLL_INVALID_PAYMENT_TYPE\""
              },
              "value": "PAYROLL_INVALID_PAYMENT_TYPE"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 103,
            "name": "ERROR_NOTHING_PAID",
            "nodeType": "VariableDeclaration",
            "scope": 1984,
            "src": "3710:67:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 101,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "3710:6:0",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "504159524f4c4c5f4e4f5448494e475f50414944",
              "id": 102,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "3755:22:0",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_464ab43351bb39adf29249dc95c2c8d013eb81eba7ad49e0c243b46e98877fad",
                "typeString": "literal_string \"PAYROLL_NOTHING_PAID\""
              },
              "value": "PAYROLL_NOTHING_PAID"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 106,
            "name": "ERROR_CAN_NOT_FORWARD",
            "nodeType": "VariableDeclaration",
            "scope": 1984,
            "src": "3783:73:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 104,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "3783:6:0",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "504159524f4c4c5f43414e5f4e4f545f464f5257415244",
              "id": 105,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "3831:25:0",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_af8e5d8414fe16fa841e3381a7b160e73f4bf11f9e7297d242f6bd149109a9a8",
                "typeString": "literal_string \"PAYROLL_CAN_NOT_FORWARD\""
              },
              "value": "PAYROLL_CAN_NOT_FORWARD"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 109,
            "name": "ERROR_EMPLOYEE_NULL_ADDRESS",
            "nodeType": "VariableDeclaration",
            "scope": 1984,
            "src": "3862:85:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 107,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "3862:6:0",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "504159524f4c4c5f454d504c4f5945455f4e554c4c5f41444452455353",
              "id": 108,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "3916:31:0",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_f7cfac5b02ff2c79859c54a3fce4f9af5759533401210b72d16082aae2bfe2ee",
                "typeString": "literal_string \"PAYROLL_EMPLOYEE_NULL_ADDRESS\""
              },
              "value": "PAYROLL_EMPLOYEE_NULL_ADDRESS"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 112,
            "name": "ERROR_EMPLOYEE_ALREADY_EXIST",
            "nodeType": "VariableDeclaration",
            "scope": 1984,
            "src": "3953:87:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 110,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "3953:6:0",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "504159524f4c4c5f454d504c4f5945455f414c52454144595f4558495354",
              "id": 111,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "4008:32:0",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_a98a26435327a3c46844ea4f9836be81c5293fc8a885b94b45f249465ed93698",
                "typeString": "literal_string \"PAYROLL_EMPLOYEE_ALREADY_EXIST\""
              },
              "value": "PAYROLL_EMPLOYEE_ALREADY_EXIST"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 115,
            "name": "ERROR_FEED_NOT_CONTRACT",
            "nodeType": "VariableDeclaration",
            "scope": 1984,
            "src": "4046:77:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 113,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "4046:6:0",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "504159524f4c4c5f464545445f4e4f545f434f4e5452414354",
              "id": 114,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "4096:27:0",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_e2229bd8fbc473114577fbfae659ff9b1622a8653983fbae3408e8827cdabab1",
                "typeString": "literal_string \"PAYROLL_FEED_NOT_CONTRACT\""
              },
              "value": "PAYROLL_FEED_NOT_CONTRACT"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 118,
            "name": "ERROR_EXPIRY_TIME_TOO_SHORT",
            "nodeType": "VariableDeclaration",
            "scope": 1984,
            "src": "4129:85:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 116,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "4129:6:0",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "504159524f4c4c5f4558504952595f54494d455f544f4f5f53484f5254",
              "id": 117,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "4183:31:0",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_086e83ae4281322c96b09123c7687db7954640ecec690b5d0edb6dbfc17b5ec7",
                "typeString": "literal_string \"PAYROLL_EXPIRY_TIME_TOO_SHORT\""
              },
              "value": "PAYROLL_EXPIRY_TIME_TOO_SHORT"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 121,
            "name": "ERROR_PAST_TERMINATION_DATE",
            "nodeType": "VariableDeclaration",
            "scope": 1984,
            "src": "4220:85:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 119,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "4220:6:0",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "504159524f4c4c5f504153545f5445524d494e4154494f4e5f44415445",
              "id": 120,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "4274:31:0",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_f89359950816e67b7f2b736b5cf048d89ad0e907dad0a20830ca273ef80123c3",
                "typeString": "literal_string \"PAYROLL_PAST_TERMINATION_DATE\""
              },
              "value": "PAYROLL_PAST_TERMINATION_DATE"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 124,
            "name": "ERROR_EXCHANGE_RATE_TOO_LOW",
            "nodeType": "VariableDeclaration",
            "scope": 1984,
            "src": "4311:85:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 122,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "4311:6:0",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "504159524f4c4c5f45584348414e47455f524154455f544f4f5f4c4f57",
              "id": 123,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "4365:31:0",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_eb441e990ecc79e1ceb2fbfc7c3c1b397bafc4965502d3fc610dffa691801763",
                "typeString": "literal_string \"PAYROLL_EXCHANGE_RATE_TOO_LOW\""
              },
              "value": "PAYROLL_EXCHANGE_RATE_TOO_LOW"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 127,
            "name": "ERROR_LAST_PAYROLL_DATE_TOO_BIG",
            "nodeType": "VariableDeclaration",
            "scope": 1984,
            "src": "4402:85:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 125,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "4402:6:0",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "504159524f4c4c5f4c4153545f444154455f544f4f5f424947",
              "id": 126,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "4460:27:0",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_d7e3eb66175393d9f4258ad8eed97a7c810366d3f61f9ce25a8f6f1cc275ec95",
                "typeString": "literal_string \"PAYROLL_LAST_DATE_TOO_BIG\""
              },
              "value": "PAYROLL_LAST_DATE_TOO_BIG"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 130,
            "name": "ERROR_INVALID_REQUESTED_AMOUNT",
            "nodeType": "VariableDeclaration",
            "scope": 1984,
            "src": "4493:88:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 128,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "4493:6:0",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "504159524f4c4c5f494e56414c49445f5245515545535445445f414d54",
              "id": 129,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "4550:31:0",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_bf445dfdf1e5b661f5955441508282db24b09bddac520fbaae8ce53716cb894e",
                "typeString": "literal_string \"PAYROLL_INVALID_REQUESTED_AMT\""
              },
              "value": "PAYROLL_INVALID_REQUESTED_AMT"
            },
            "visibility": "private"
          },
          {
            "canonicalName": "Payroll.PaymentType",
            "id": 134,
            "members": [
              {
                "id": 131,
                "name": "Payroll",
                "nodeType": "EnumValue",
                "src": "4607:7:0"
              },
              {
                "id": 132,
                "name": "Reimbursement",
                "nodeType": "EnumValue",
                "src": "4616:13:0"
              },
              {
                "id": 133,
                "name": "Bonus",
                "nodeType": "EnumValue",
                "src": "4631:5:0"
              }
            ],
            "name": "PaymentType",
            "nodeType": "EnumDefinition",
            "src": "4588:50:0"
          },
          {
            "canonicalName": "Payroll.Employee",
            "id": 156,
            "members": [
              {
                "constant": false,
                "id": 136,
                "name": "accountAddress",
                "nodeType": "VariableDeclaration",
                "scope": 156,
                "src": "4670:22:0",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 135,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "4670:7:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 138,
                "name": "denominationTokenSalary",
                "nodeType": "VariableDeclaration",
                "scope": 156,
                "src": "4742:31:0",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 137,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "4742:7:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 140,
                "name": "accruedSalary",
                "nodeType": "VariableDeclaration",
                "scope": 156,
                "src": "4826:21:0",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 139,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "4826:7:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 142,
                "name": "bonus",
                "nodeType": "VariableDeclaration",
                "scope": 156,
                "src": "4925:13:0",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 141,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "4925:7:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 144,
                "name": "reimbursements",
                "nodeType": "VariableDeclaration",
                "scope": 156,
                "src": "4948:22:0",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 143,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "4948:7:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 146,
                "name": "lastPayroll",
                "nodeType": "VariableDeclaration",
                "scope": 156,
                "src": "4980:18:0",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint64",
                  "typeString": "uint64"
                },
                "typeName": {
                  "id": 145,
                  "name": "uint64",
                  "nodeType": "ElementaryTypeName",
                  "src": "4980:6:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 148,
                "name": "endDate",
                "nodeType": "VariableDeclaration",
                "scope": 156,
                "src": "5008:14:0",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint64",
                  "typeString": "uint64"
                },
                "typeName": {
                  "id": 147,
                  "name": "uint64",
                  "nodeType": "ElementaryTypeName",
                  "src": "5008:6:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 151,
                "name": "allocationTokenAddresses",
                "nodeType": "VariableDeclaration",
                "scope": 156,
                "src": "5032:34:0",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                  "typeString": "address[]"
                },
                "typeName": {
                  "baseType": {
                    "id": 149,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5032:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 150,
                  "length": null,
                  "nodeType": "ArrayTypeName",
                  "src": "5032:9:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                    "typeString": "address[]"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 155,
                "name": "allocationTokens",
                "nodeType": "VariableDeclaration",
                "scope": 156,
                "src": "5076:44:0",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                  "typeString": "mapping(address => uint256)"
                },
                "typeName": {
                  "id": 154,
                  "keyType": {
                    "id": 152,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5084:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "Mapping",
                  "src": "5076:27:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                    "typeString": "mapping(address => uint256)"
                  },
                  "valueType": {
                    "id": 153,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5095:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "Employee",
            "nodeType": "StructDefinition",
            "scope": 1984,
            "src": "4644:483:0",
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 158,
            "name": "finance",
            "nodeType": "VariableDeclaration",
            "scope": 1984,
            "src": "5133:22:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_Finance_$5528",
              "typeString": "contract Finance"
            },
            "typeName": {
              "contractScope": null,
              "id": 157,
              "name": "Finance",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 5528,
              "src": "5133:7:0",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Finance_$5528",
                "typeString": "contract Finance"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 160,
            "name": "denominationToken",
            "nodeType": "VariableDeclaration",
            "scope": 1984,
            "src": "5161:32:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 159,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "5161:7:0",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 162,
            "name": "feed",
            "nodeType": "VariableDeclaration",
            "scope": 1984,
            "src": "5199:17:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_IFeed_$14313",
              "typeString": "contract IFeed"
            },
            "typeName": {
              "contractScope": null,
              "id": 161,
              "name": "IFeed",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 14313,
              "src": "5199:5:0",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IFeed_$14313",
                "typeString": "contract IFeed"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 164,
            "name": "rateExpiryTime",
            "nodeType": "VariableDeclaration",
            "scope": 1984,
            "src": "5222:28:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint64",
              "typeString": "uint64"
            },
            "typeName": {
              "id": 163,
              "name": "uint64",
              "nodeType": "ElementaryTypeName",
              "src": "5222:6:0",
              "typeDescriptions": {
                "typeIdentifier": "t_uint64",
                "typeString": "uint64"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 166,
            "name": "nextEmployee",
            "nodeType": "VariableDeclaration",
            "scope": 1984,
            "src": "5360:27:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 165,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "5360:7:0",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 170,
            "name": "employees",
            "nodeType": "VariableDeclaration",
            "scope": 1984,
            "src": "5393:47:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Employee_$156_storage_$",
              "typeString": "mapping(uint256 => struct Payroll.Employee)"
            },
            "typeName": {
              "id": 169,
              "keyType": {
                "id": 167,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "5401:7:0",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              },
              "nodeType": "Mapping",
              "src": "5393:28:0",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Employee_$156_storage_$",
                "typeString": "mapping(uint256 => struct Payroll.Employee)"
              },
              "valueType": {
                "contractScope": null,
                "id": 168,
                "name": "Employee",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 156,
                "src": "5412:8:0",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                  "typeString": "struct Payroll.Employee"
                }
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 174,
            "name": "employeeIds",
            "nodeType": "VariableDeclaration",
            "scope": 1984,
            "src": "5477:48:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
              "typeString": "mapping(address => uint256)"
            },
            "typeName": {
              "id": 173,
              "keyType": {
                "id": 171,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "5485:7:0",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "5477:27:0",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                "typeString": "mapping(address => uint256)"
              },
              "valueType": {
                "id": 172,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "5496:7:0",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 178,
            "name": "allowedTokens",
            "nodeType": "VariableDeclaration",
            "scope": 1984,
            "src": "5570:47:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
              "typeString": "mapping(address => bool)"
            },
            "typeName": {
              "id": 177,
              "keyType": {
                "id": 175,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "5578:7:0",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "5570:24:0",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                "typeString": "mapping(address => bool)"
              },
              "valueType": {
                "id": 176,
                "name": "bool",
                "nodeType": "ElementaryTypeName",
                "src": "5589:4:0",
                "typeDescriptions": {
                  "typeIdentifier": "t_bool",
                  "typeString": "bool"
                }
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 190,
            "name": "AddEmployee",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 189,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 180,
                  "indexed": true,
                  "name": "employeeId",
                  "nodeType": "VariableDeclaration",
                  "scope": 190,
                  "src": "5651:26:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 179,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5651:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 182,
                  "indexed": true,
                  "name": "accountAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 190,
                  "src": "5687:30:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 181,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5687:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 184,
                  "indexed": false,
                  "name": "initialDenominationSalary",
                  "nodeType": "VariableDeclaration",
                  "scope": 190,
                  "src": "5727:33:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 183,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5727:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 186,
                  "indexed": false,
                  "name": "startDate",
                  "nodeType": "VariableDeclaration",
                  "scope": 190,
                  "src": "5770:16:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 185,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "5770:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 188,
                  "indexed": false,
                  "name": "role",
                  "nodeType": "VariableDeclaration",
                  "scope": 190,
                  "src": "5796:11:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 187,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "5796:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5641:172:0"
            },
            "src": "5624:190:0"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 196,
            "name": "TerminateEmployee",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 195,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 192,
                  "indexed": true,
                  "name": "employeeId",
                  "nodeType": "VariableDeclaration",
                  "scope": 196,
                  "src": "5843:26:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 191,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5843:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 194,
                  "indexed": false,
                  "name": "endDate",
                  "nodeType": "VariableDeclaration",
                  "scope": 196,
                  "src": "5871:14:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 193,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "5871:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5842:44:0"
            },
            "src": "5819:68:0"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 202,
            "name": "SetEmployeeSalary",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 201,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 198,
                  "indexed": true,
                  "name": "employeeId",
                  "nodeType": "VariableDeclaration",
                  "scope": 202,
                  "src": "5916:26:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 197,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5916:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 200,
                  "indexed": false,
                  "name": "denominationSalary",
                  "nodeType": "VariableDeclaration",
                  "scope": 202,
                  "src": "5944:26:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 199,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5944:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5915:56:0"
            },
            "src": "5892:80:0"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 208,
            "name": "AddEmployeeAccruedSalary",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 207,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 204,
                  "indexed": true,
                  "name": "employeeId",
                  "nodeType": "VariableDeclaration",
                  "scope": 208,
                  "src": "6008:26:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 203,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6008:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 206,
                  "indexed": false,
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 208,
                  "src": "6036:14:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 205,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6036:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6007:44:0"
            },
            "src": "5977:75:0"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 214,
            "name": "AddEmployeeBonus",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 213,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 210,
                  "indexed": true,
                  "name": "employeeId",
                  "nodeType": "VariableDeclaration",
                  "scope": 214,
                  "src": "6080:26:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 209,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6080:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 212,
                  "indexed": false,
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 214,
                  "src": "6108:14:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 211,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6108:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6079:44:0"
            },
            "src": "6057:67:0"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 220,
            "name": "AddEmployeeReimbursement",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 219,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 216,
                  "indexed": true,
                  "name": "employeeId",
                  "nodeType": "VariableDeclaration",
                  "scope": 220,
                  "src": "6160:26:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 215,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6160:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 218,
                  "indexed": false,
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 220,
                  "src": "6188:14:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 217,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6188:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6159:44:0"
            },
            "src": "6129:75:0"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 228,
            "name": "ChangeAddressByEmployee",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 227,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 222,
                  "indexed": true,
                  "name": "employeeId",
                  "nodeType": "VariableDeclaration",
                  "scope": 228,
                  "src": "6239:26:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 221,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6239:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 224,
                  "indexed": true,
                  "name": "newAccountAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 228,
                  "src": "6267:33:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 223,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6267:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 226,
                  "indexed": true,
                  "name": "oldAccountAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 228,
                  "src": "6302:33:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 225,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6302:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6238:98:0"
            },
            "src": "6209:128:0"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 232,
            "name": "DetermineAllocation",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 231,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 230,
                  "indexed": true,
                  "name": "employeeId",
                  "nodeType": "VariableDeclaration",
                  "scope": 232,
                  "src": "6368:26:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 229,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6368:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6367:28:0"
            },
            "src": "6342:54:0"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 246,
            "name": "SendPayment",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 245,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 234,
                  "indexed": true,
                  "name": "employeeId",
                  "nodeType": "VariableDeclaration",
                  "scope": 246,
                  "src": "6428:26:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 233,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6428:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 236,
                  "indexed": true,
                  "name": "accountAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 246,
                  "src": "6464:30:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 235,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6464:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 238,
                  "indexed": true,
                  "name": "token",
                  "nodeType": "VariableDeclaration",
                  "scope": 246,
                  "src": "6504:21:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 237,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6504:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 240,
                  "indexed": false,
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 246,
                  "src": "6535:14:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 239,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6535:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 242,
                  "indexed": false,
                  "name": "exchangeRate",
                  "nodeType": "VariableDeclaration",
                  "scope": 246,
                  "src": "6559:20:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 241,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6559:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 244,
                  "indexed": false,
                  "name": "paymentReference",
                  "nodeType": "VariableDeclaration",
                  "scope": 246,
                  "src": "6589:23:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 243,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "6589:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6418:200:0"
            },
            "src": "6401:218:0"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 252,
            "name": "SetAllowedToken",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 251,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 248,
                  "indexed": true,
                  "name": "token",
                  "nodeType": "VariableDeclaration",
                  "scope": 252,
                  "src": "6646:21:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 247,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6646:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 250,
                  "indexed": false,
                  "name": "allowed",
                  "nodeType": "VariableDeclaration",
                  "scope": 252,
                  "src": "6669:12:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 249,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "6669:4:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6645:37:0"
            },
            "src": "6624:59:0"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 256,
            "name": "SetPriceFeed",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 255,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 254,
                  "indexed": true,
                  "name": "feed",
                  "nodeType": "VariableDeclaration",
                  "scope": 256,
                  "src": "6707:20:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 253,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6707:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6706:22:0"
            },
            "src": "6688:41:0"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 260,
            "name": "SetRateExpiryTime",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 259,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 258,
                  "indexed": false,
                  "name": "time",
                  "nodeType": "VariableDeclaration",
                  "scope": 260,
                  "src": "6758:11:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 257,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "6758:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6757:13:0"
            },
            "src": "6734:37:0"
          },
          {
            "body": {
              "id": 272,
              "nodeType": "Block",
              "src": "6859:94:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 266,
                            "name": "_employeeId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 262,
                            "src": "6893:11:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 265,
                          "name": "_employeeExists",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1675,
                          "src": "6877:15:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_bool_$",
                            "typeString": "function (uint256) view returns (bool)"
                          }
                        },
                        "id": 267,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "6877:28:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 268,
                        "name": "ERROR_EMPLOYEE_DOESNT_EXIST",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 70,
                        "src": "6907:27:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 264,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        15156,
                        15157
                      ],
                      "referencedDeclaration": 15157,
                      "src": "6869:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 269,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6869:66:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 270,
                  "nodeType": "ExpressionStatement",
                  "src": "6869:66:0"
                },
                {
                  "id": 271,
                  "nodeType": "PlaceholderStatement",
                  "src": "6945:1:0"
                }
              ]
            },
            "documentation": null,
            "id": 273,
            "name": "employeeIdExists",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 263,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 262,
                  "name": "_employeeId",
                  "nodeType": "VariableDeclaration",
                  "scope": 273,
                  "src": "6838:19:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 261,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6838:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6837:21:0"
            },
            "src": "6812:141:0",
            "visibility": "internal"
          },
          {
            "body": {
              "id": 285,
              "nodeType": "Block",
              "src": "7053:199:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 279,
                            "name": "_employeeId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 275,
                            "src": "7194:11:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 278,
                          "name": "_isEmployeeIdActive",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1763,
                          "src": "7174:19:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_bool_$",
                            "typeString": "function (uint256) view returns (bool)"
                          }
                        },
                        "id": 280,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "7174:32:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 281,
                        "name": "ERROR_NON_ACTIVE_EMPLOYEE",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 73,
                        "src": "7208:25:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 277,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        15156,
                        15157
                      ],
                      "referencedDeclaration": 15157,
                      "src": "7166:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 282,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7166:68:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 283,
                  "nodeType": "ExpressionStatement",
                  "src": "7166:68:0"
                },
                {
                  "id": 284,
                  "nodeType": "PlaceholderStatement",
                  "src": "7244:1:0"
                }
              ]
            },
            "documentation": null,
            "id": 286,
            "name": "employeeActive",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 276,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 275,
                  "name": "_employeeId",
                  "nodeType": "VariableDeclaration",
                  "scope": 286,
                  "src": "7032:19:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 274,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7032:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7031:21:0"
            },
            "src": "7008:244:0",
            "visibility": "internal"
          },
          {
            "body": {
              "id": 303,
              "nodeType": "Block",
              "src": "7332:129:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 298,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 289,
                              "name": "employees",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 170,
                              "src": "7350:9:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Employee_$156_storage_$",
                                "typeString": "mapping(uint256 => struct Payroll.Employee storage ref)"
                              }
                            },
                            "id": 294,
                            "indexExpression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 290,
                                "name": "employeeIds",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 174,
                                "src": "7360:11:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                  "typeString": "mapping(address => uint256)"
                                }
                              },
                              "id": 293,
                              "indexExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 291,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 15153,
                                  "src": "7372:3:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 292,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sender",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "7372:10:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "7360:23:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "7350:34:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Employee_$156_storage",
                              "typeString": "struct Payroll.Employee storage ref"
                            }
                          },
                          "id": 295,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "accountAddress",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 136,
                          "src": "7350:49:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 296,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 15153,
                            "src": "7403:3:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 297,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "7403:10:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "7350:63:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 299,
                        "name": "ERROR_SENDER_DOES_NOT_MATCH",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 76,
                        "src": "7415:27:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 288,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        15156,
                        15157
                      ],
                      "referencedDeclaration": 15157,
                      "src": "7342:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 300,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7342:101:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 301,
                  "nodeType": "ExpressionStatement",
                  "src": "7342:101:0"
                },
                {
                  "id": 302,
                  "nodeType": "PlaceholderStatement",
                  "src": "7453:1:0"
                }
              ]
            },
            "documentation": null,
            "id": 304,
            "name": "employeeMatches",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 287,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7332:0:0"
            },
            "src": "7307:154:0",
            "visibility": "internal"
          },
          {
            "body": {
              "id": 347,
              "nodeType": "Block",
              "src": "8338:389:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 317,
                      "name": "initialized",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10795,
                      "src": "8348:11:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 318,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8348:13:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 319,
                  "nodeType": "ExpressionStatement",
                  "src": "8348:13:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 322,
                            "name": "_finance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 306,
                            "src": "8391:8:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_Finance_$5528",
                              "typeString": "contract Finance"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_Finance_$5528",
                              "typeString": "contract Finance"
                            }
                          ],
                          "id": 321,
                          "name": "isContract",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10837,
                          "src": "8380:10:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                            "typeString": "function (address) view returns (bool)"
                          }
                        },
                        "id": 323,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "8380:20:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 324,
                        "name": "ERROR_FINANCE_NOT_CONTRACT",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 79,
                        "src": "8402:26:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 320,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        15156,
                        15157
                      ],
                      "referencedDeclaration": 15157,
                      "src": "8372:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 325,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8372:57:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 326,
                  "nodeType": "ExpressionStatement",
                  "src": "8372:57:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 329,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 327,
                      "name": "finance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 158,
                      "src": "8439:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_Finance_$5528",
                        "typeString": "contract Finance"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 328,
                      "name": "_finance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 306,
                      "src": "8449:8:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_Finance_$5528",
                        "typeString": "contract Finance"
                      }
                    },
                    "src": "8439:18:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Finance_$5528",
                      "typeString": "contract Finance"
                    }
                  },
                  "id": 330,
                  "nodeType": "ExpressionStatement",
                  "src": "8439:18:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 333,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 331,
                      "name": "denominationToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 160,
                      "src": "8468:17:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 332,
                      "name": "_denominationToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 308,
                      "src": "8488:18:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "8468:38:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 334,
                  "nodeType": "ExpressionStatement",
                  "src": "8468:38:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 336,
                        "name": "_priceFeed",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 310,
                        "src": "8530:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IFeed_$14313",
                          "typeString": "contract IFeed"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IFeed_$14313",
                          "typeString": "contract IFeed"
                        }
                      ],
                      "id": 335,
                      "name": "_setPriceFeed",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1121,
                      "src": "8516:13:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IFeed_$14313_$returns$__$",
                        "typeString": "function (contract IFeed)"
                      }
                    },
                    "id": 337,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8516:25:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 338,
                  "nodeType": "ExpressionStatement",
                  "src": "8516:25:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 340,
                        "name": "_rateExpiryTime",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 312,
                        "src": "8570:15:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      ],
                      "id": 339,
                      "name": "_setRateExpiryTime",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1142,
                      "src": "8551:18:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint64_$returns$__$",
                        "typeString": "function (uint64)"
                      }
                    },
                    "id": 341,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8551:35:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 342,
                  "nodeType": "ExpressionStatement",
                  "src": "8551:35:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 345,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 343,
                      "name": "nextEmployee",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 166,
                      "src": "8704:12:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "31",
                      "id": 344,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "8719:1:0",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "src": "8704:16:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 346,
                  "nodeType": "ExpressionStatement",
                  "src": "8704:16:0"
                }
              ]
            },
            "documentation": "@notice Initialize Payroll app for Finance at `_finance` and price feed at `_priceFeed`, setting denomination token to `_token` and exchange rate expiry time to `@transformTime(_rateExpiryTime)`\n@dev Note that we do not require _denominationToken to be a contract, as it may be a \"fake\"\n     address used by the price feed to denominate fiat currencies\n@param _finance Address of the Finance app this Payroll app will rely on for payments (non-changeable)\n@param _denominationToken Address of the denomination token used for salary accounting\n@param _priceFeed Address of the price feed\n@param _rateExpiryTime Acceptable expiry time in seconds for the price feed's exchange rates",
            "id": 348,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 315,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 314,
                  "name": "onlyInit",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 10742,
                  "src": "8329:8:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "8329:8:0"
              }
            ],
            "name": "initialize",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 313,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 306,
                  "name": "_finance",
                  "nodeType": "VariableDeclaration",
                  "scope": 348,
                  "src": "8232:16:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_Finance_$5528",
                    "typeString": "contract Finance"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 305,
                    "name": "Finance",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 5528,
                    "src": "8232:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Finance_$5528",
                      "typeString": "contract Finance"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 308,
                  "name": "_denominationToken",
                  "nodeType": "VariableDeclaration",
                  "scope": 348,
                  "src": "8250:26:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 307,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8250:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 310,
                  "name": "_priceFeed",
                  "nodeType": "VariableDeclaration",
                  "scope": 348,
                  "src": "8278:16:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IFeed_$14313",
                    "typeString": "contract IFeed"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 309,
                    "name": "IFeed",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 14313,
                    "src": "8278:5:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IFeed_$14313",
                      "typeString": "contract IFeed"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 312,
                  "name": "_rateExpiryTime",
                  "nodeType": "VariableDeclaration",
                  "scope": 348,
                  "src": "8296:22:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 311,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "8296:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8231:88:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 316,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8338:0:0"
            },
            "scope": 1984,
            "src": "8212:515:0",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 381,
              "nodeType": "Block",
              "src": "9199:174:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 366,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 362,
                            "name": "allowedTokens",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 178,
                            "src": "9217:13:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                              "typeString": "mapping(address => bool)"
                            }
                          },
                          "id": 364,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 363,
                            "name": "_token",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 350,
                            "src": "9231:6:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "9217:21:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 365,
                          "name": "_allowed",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 352,
                          "src": "9242:8:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "9217:33:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 367,
                        "name": "ERROR_TOKEN_ALREADY_SET",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 82,
                        "src": "9252:23:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 361,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        15156,
                        15157
                      ],
                      "referencedDeclaration": 15157,
                      "src": "9209:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 368,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9209:67:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 369,
                  "nodeType": "ExpressionStatement",
                  "src": "9209:67:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 374,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 370,
                        "name": "allowedTokens",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 178,
                        "src": "9286:13:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                          "typeString": "mapping(address => bool)"
                        }
                      },
                      "id": 372,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 371,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 350,
                        "src": "9300:6:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "9286:21:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 373,
                      "name": "_allowed",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 352,
                      "src": "9310:8:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "9286:32:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 375,
                  "nodeType": "ExpressionStatement",
                  "src": "9286:32:0"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 377,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 350,
                        "src": "9349:6:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 378,
                        "name": "_allowed",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 352,
                        "src": "9357:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 376,
                      "name": "SetAllowedToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 252,
                      "src": "9333:15:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_bool_$returns$__$",
                        "typeString": "function (address,bool)"
                      }
                    },
                    "id": 379,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9333:33:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 380,
                  "nodeType": "EmitStatement",
                  "src": "9328:38:0"
                }
              ]
            },
            "documentation": "@notice `_allowed ? 'Add' : 'Remove'` `_token.symbol(): string` `_allowed ? 'to' : 'from'` the set of allowed tokens\n@param _token Address of the token to be added or removed from the list of allowed tokens for payments\n@param _allowed Boolean to tell whether the given token should be added or removed from the list",
            "id": 382,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 355,
                    "name": "MANAGE_ALLOWED_TOKENS_ROLE",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 41,
                    "src": "9158:26:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 357,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 350,
                        "src": "9190:6:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 356,
                      "name": "arr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        9167,
                        9182,
                        9202,
                        9217,
                        9237,
                        9258,
                        9282,
                        9302,
                        9331,
                        9356,
                        9381,
                        9404,
                        9435,
                        9474,
                        9521,
                        9576
                      ],
                      "referencedDeclaration": 9217,
                      "src": "9186:3:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_address_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$",
                        "typeString": "function (address) pure returns (uint256[] memory)"
                      }
                    },
                    "id": 358,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9186:11:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                      "typeString": "uint256[] memory"
                    }
                  }
                ],
                "id": 359,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 354,
                  "name": "authP",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 10428,
                  "src": "9152:5:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$_t_array$_t_uint256_$dyn_memory_ptr_$",
                    "typeString": "modifier (bytes32,uint256[] memory)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "9152:46:0"
              }
            ],
            "name": "setAllowedToken",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 353,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 350,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 382,
                  "src": "9112:14:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 349,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "9112:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 352,
                  "name": "_allowed",
                  "nodeType": "VariableDeclaration",
                  "scope": 382,
                  "src": "9128:13:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 351,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "9128:4:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9111:31:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 360,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "9199:0:0"
            },
            "scope": 1984,
            "src": "9087:286:0",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 398,
              "nodeType": "Block",
              "src": "9610:37:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 395,
                        "name": "_feed",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 384,
                        "src": "9634:5:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IFeed_$14313",
                          "typeString": "contract IFeed"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IFeed_$14313",
                          "typeString": "contract IFeed"
                        }
                      ],
                      "id": 394,
                      "name": "_setPriceFeed",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1121,
                      "src": "9620:13:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IFeed_$14313_$returns$__$",
                        "typeString": "function (contract IFeed)"
                      }
                    },
                    "id": 396,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9620:20:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 397,
                  "nodeType": "ExpressionStatement",
                  "src": "9620:20:0"
                }
              ]
            },
            "documentation": "@notice Set the price feed for exchange rates to `_feed`\n@param _feed Address of the new price feed instance",
            "id": 399,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 387,
                    "name": "MODIFY_PRICE_FEED_ROLE",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 44,
                    "src": "9568:22:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 389,
                        "name": "_feed",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 384,
                        "src": "9596:5:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IFeed_$14313",
                          "typeString": "contract IFeed"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 390,
                        "name": "feed",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 162,
                        "src": "9603:4:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IFeed_$14313",
                          "typeString": "contract IFeed"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IFeed_$14313",
                          "typeString": "contract IFeed"
                        },
                        {
                          "typeIdentifier": "t_contract$_IFeed_$14313",
                          "typeString": "contract IFeed"
                        }
                      ],
                      "id": 388,
                      "name": "arr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        9167,
                        9182,
                        9202,
                        9217,
                        9237,
                        9258,
                        9282,
                        9302,
                        9331,
                        9356,
                        9381,
                        9404,
                        9435,
                        9474,
                        9521,
                        9576
                      ],
                      "referencedDeclaration": 9237,
                      "src": "9592:3:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_address_$_t_address_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$",
                        "typeString": "function (address,address) pure returns (uint256[] memory)"
                      }
                    },
                    "id": 391,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9592:16:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                      "typeString": "uint256[] memory"
                    }
                  }
                ],
                "id": 392,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 386,
                  "name": "authP",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 10428,
                  "src": "9562:5:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$_t_array$_t_uint256_$dyn_memory_ptr_$",
                    "typeString": "modifier (bytes32,uint256[] memory)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "9562:47:0"
              }
            ],
            "name": "setPriceFeed",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 385,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 384,
                  "name": "_feed",
                  "nodeType": "VariableDeclaration",
                  "scope": 399,
                  "src": "9540:11:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IFeed_$14313",
                    "typeString": "contract IFeed"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 383,
                    "name": "IFeed",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 14313,
                    "src": "9540:5:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IFeed_$14313",
                      "typeString": "contract IFeed"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9539:13:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 393,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "9610:0:0"
            },
            "scope": 1984,
            "src": "9518:129:0",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 419,
              "nodeType": "Block",
              "src": "10093:42:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 416,
                        "name": "_time",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 401,
                        "src": "10122:5:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      ],
                      "id": 415,
                      "name": "_setRateExpiryTime",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1142,
                      "src": "10103:18:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint64_$returns$__$",
                        "typeString": "function (uint64)"
                      }
                    },
                    "id": 417,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10103:25:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 418,
                  "nodeType": "ExpressionStatement",
                  "src": "10103:25:0"
                }
              ]
            },
            "documentation": "@notice Set the acceptable expiry time for the price feed's exchange rates to `@transformTime(_time)`\n@dev Exchange rates older than the given value won't be accepted for payments and will cause payouts to revert\n@param _time The expiration time in seconds for exchange rates",
            "id": 420,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 404,
                    "name": "MODIFY_RATE_EXPIRY_ROLE",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 47,
                    "src": "10022:23:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 407,
                            "name": "_time",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 401,
                            "src": "10059:5:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          ],
                          "id": 406,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "10051:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          },
                          "typeName": "uint256"
                        },
                        "id": 408,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "10051:14:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 410,
                            "name": "rateExpiryTime",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 164,
                            "src": "10075:14:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          ],
                          "id": 409,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "10067:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          },
                          "typeName": "uint256"
                        },
                        "id": 411,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "10067:23:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 405,
                      "name": "arr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        9167,
                        9182,
                        9202,
                        9217,
                        9237,
                        9258,
                        9282,
                        9302,
                        9331,
                        9356,
                        9381,
                        9404,
                        9435,
                        9474,
                        9521,
                        9576
                      ],
                      "referencedDeclaration": 9435,
                      "src": "10047:3:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256[] memory)"
                      }
                    },
                    "id": 412,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10047:44:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                      "typeString": "uint256[] memory"
                    }
                  }
                ],
                "id": 413,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 403,
                  "name": "authP",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 10428,
                  "src": "10016:5:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$_t_array$_t_uint256_$dyn_memory_ptr_$",
                    "typeString": "modifier (bytes32,uint256[] memory)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "10016:76:0"
              }
            ],
            "name": "setRateExpiryTime",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 402,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 401,
                  "name": "_time",
                  "nodeType": "VariableDeclaration",
                  "scope": 420,
                  "src": "9993:12:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 400,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "9993:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9992:14:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 414,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "10093:0:0"
            },
            "scope": 1984,
            "src": "9966:169:0",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 448,
              "nodeType": "Block",
              "src": "10878:93:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 442,
                        "name": "_accountAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 422,
                        "src": "10901:15:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 443,
                        "name": "_initialDenominationSalary",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 424,
                        "src": "10918:26:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 444,
                        "name": "_startDate",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 426,
                        "src": "10946:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 445,
                        "name": "_role",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 428,
                        "src": "10958:5:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_calldata_ptr",
                          "typeString": "string calldata"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        },
                        {
                          "typeIdentifier": "t_string_calldata_ptr",
                          "typeString": "string calldata"
                        }
                      ],
                      "id": 441,
                      "name": "_addEmployee",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1196,
                      "src": "10888:12:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_uint64_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (address,uint256,uint64,string memory)"
                      }
                    },
                    "id": 446,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10888:76:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 447,
                  "nodeType": "ExpressionStatement",
                  "src": "10888:76:0"
                }
              ]
            },
            "documentation": "@notice Add employee with address `_accountAddress` to payroll with an salary of `_initialDenominationSalary` per second, starting on `@formatDate(_startDate)`\n@param _accountAddress Employee's address to receive payroll\n@param _initialDenominationSalary Employee's salary, per second in denomination token\n@param _startDate Employee's starting timestamp in seconds (it actually sets their initial lastPayroll value)\n@param _role Employee's role",
            "id": 449,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 431,
                    "name": "ADD_EMPLOYEE_ROLE",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 26,
                    "src": "10784:17:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 433,
                        "name": "_accountAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 422,
                        "src": "10807:15:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 434,
                        "name": "_initialDenominationSalary",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 424,
                        "src": "10824:26:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 436,
                            "name": "_startDate",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 426,
                            "src": "10860:10:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          ],
                          "id": 435,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "10852:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          },
                          "typeName": "uint256"
                        },
                        "id": 437,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "10852:19:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 432,
                      "name": "arr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        9167,
                        9182,
                        9202,
                        9217,
                        9237,
                        9258,
                        9282,
                        9302,
                        9331,
                        9356,
                        9381,
                        9404,
                        9435,
                        9474,
                        9521,
                        9576
                      ],
                      "referencedDeclaration": 9258,
                      "src": "10803:3:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_address_$_t_uint256_$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$",
                        "typeString": "function (address,uint256,uint256) pure returns (uint256[] memory)"
                      }
                    },
                    "id": 438,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10803:69:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                      "typeString": "uint256[] memory"
                    }
                  }
                ],
                "id": 439,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 430,
                  "name": "authP",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 10428,
                  "src": "10778:5:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$_t_array$_t_uint256_$dyn_memory_ptr_$",
                    "typeString": "modifier (bytes32,uint256[] memory)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "10778:95:0"
              }
            ],
            "name": "addEmployee",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 429,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 422,
                  "name": "_accountAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 449,
                  "src": "10659:23:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 421,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "10659:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 424,
                  "name": "_initialDenominationSalary",
                  "nodeType": "VariableDeclaration",
                  "scope": 449,
                  "src": "10684:34:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 423,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "10684:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 426,
                  "name": "_startDate",
                  "nodeType": "VariableDeclaration",
                  "scope": 449,
                  "src": "10720:17:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 425,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "10720:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 428,
                  "name": "_role",
                  "nodeType": "VariableDeclaration",
                  "scope": 449,
                  "src": "10739:12:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_calldata_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 427,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "10739:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10658:94:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 440,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "10878:0:0"
            },
            "scope": 1984,
            "src": "10638:333:0",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 471,
              "nodeType": "Block",
              "src": "11366:48:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 467,
                        "name": "_employeeId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 451,
                        "src": "11386:11:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 468,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 453,
                        "src": "11399:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 466,
                      "name": "_addBonus",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1225,
                      "src": "11376:9:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (uint256,uint256)"
                      }
                    },
                    "id": 469,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11376:31:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 470,
                  "nodeType": "ExpressionStatement",
                  "src": "11376:31:0"
                }
              ]
            },
            "documentation": "@notice Add `_amount` to bonus for employee #`_employeeId`\n@param _employeeId Employee's identifier\n@param _amount Amount to be added to the employee's bonuses in denomination token",
            "id": 472,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 456,
                    "name": "ADD_BONUS_ROLE",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 35,
                    "src": "11283:14:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 458,
                        "name": "_employeeId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 451,
                        "src": "11303:11:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 459,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 453,
                        "src": "11316:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 457,
                      "name": "arr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        9167,
                        9182,
                        9202,
                        9217,
                        9237,
                        9258,
                        9282,
                        9302,
                        9331,
                        9356,
                        9381,
                        9404,
                        9435,
                        9474,
                        9521,
                        9576
                      ],
                      "referencedDeclaration": 9435,
                      "src": "11299:3:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256[] memory)"
                      }
                    },
                    "id": 460,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11299:25:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                      "typeString": "uint256[] memory"
                    }
                  }
                ],
                "id": 461,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 455,
                  "name": "authP",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 10428,
                  "src": "11277:5:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$_t_array$_t_uint256_$dyn_memory_ptr_$",
                    "typeString": "modifier (bytes32,uint256[] memory)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "11277:48:0"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 463,
                    "name": "_employeeId",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 451,
                    "src": "11349:11:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                ],
                "id": 464,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 462,
                  "name": "employeeActive",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 286,
                  "src": "11334:14:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_uint256_$",
                    "typeString": "modifier (uint256)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "11334:27:0"
              }
            ],
            "name": "addBonus",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 454,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 451,
                  "name": "_employeeId",
                  "nodeType": "VariableDeclaration",
                  "scope": 472,
                  "src": "11214:19:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 450,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "11214:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 453,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 472,
                  "src": "11235:15:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 452,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "11235:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11213:38:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 465,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "11366:0:0"
            },
            "scope": 1984,
            "src": "11196:218:0",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 494,
              "nodeType": "Block",
              "src": "11841:56:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 490,
                        "name": "_employeeId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 474,
                        "src": "11869:11:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 491,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 476,
                        "src": "11882:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 489,
                      "name": "_addReimbursement",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1254,
                      "src": "11851:17:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (uint256,uint256)"
                      }
                    },
                    "id": 492,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11851:39:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 493,
                  "nodeType": "ExpressionStatement",
                  "src": "11851:39:0"
                }
              ]
            },
            "documentation": "@notice Add `_amount` to reimbursements for employee #`_employeeId`\n@param _employeeId Employee's identifier\n@param _amount Amount to be added to the employee's reimbursements in denomination token",
            "id": 495,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 479,
                    "name": "ADD_REIMBURSEMENT_ROLE",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 38,
                    "src": "11750:22:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 481,
                        "name": "_employeeId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 474,
                        "src": "11778:11:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 482,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 476,
                        "src": "11791:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 480,
                      "name": "arr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        9167,
                        9182,
                        9202,
                        9217,
                        9237,
                        9258,
                        9282,
                        9302,
                        9331,
                        9356,
                        9381,
                        9404,
                        9435,
                        9474,
                        9521,
                        9576
                      ],
                      "referencedDeclaration": 9435,
                      "src": "11774:3:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256[] memory)"
                      }
                    },
                    "id": 483,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11774:25:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                      "typeString": "uint256[] memory"
                    }
                  }
                ],
                "id": 484,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 478,
                  "name": "authP",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 10428,
                  "src": "11744:5:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$_t_array$_t_uint256_$dyn_memory_ptr_$",
                    "typeString": "modifier (bytes32,uint256[] memory)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "11744:56:0"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 486,
                    "name": "_employeeId",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 474,
                    "src": "11824:11:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                ],
                "id": 487,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 485,
                  "name": "employeeActive",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 286,
                  "src": "11809:14:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_uint256_$",
                    "typeString": "modifier (uint256)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "11809:27:0"
              }
            ],
            "name": "addReimbursement",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 477,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 474,
                  "name": "_employeeId",
                  "nodeType": "VariableDeclaration",
                  "scope": 495,
                  "src": "11681:19:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 473,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "11681:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 476,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 495,
                  "src": "11702:15:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 475,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "11702:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11680:38:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 488,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "11841:0:0"
            },
            "scope": 1984,
            "src": "11655:242:0",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 552,
              "nodeType": "Block",
              "src": "12603:509:0",
              "statements": [
                {
                  "assignments": [
                    517
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 517,
                      "name": "employee",
                      "nodeType": "VariableDeclaration",
                      "scope": 553,
                      "src": "12613:25:0",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                        "typeString": "struct Payroll.Employee"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 516,
                        "name": "Employee",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 156,
                        "src": "12613:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                          "typeString": "struct Payroll.Employee"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 521,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 518,
                      "name": "employees",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 170,
                      "src": "12641:9:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Employee_$156_storage_$",
                        "typeString": "mapping(uint256 => struct Payroll.Employee storage ref)"
                      }
                    },
                    "id": 520,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 519,
                      "name": "_employeeId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 497,
                      "src": "12651:11:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "12641:22:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Employee_$156_storage",
                      "typeString": "struct Payroll.Employee storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "12613:50:0"
                },
                {
                  "assignments": [
                    523
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 523,
                      "name": "owed",
                      "nodeType": "VariableDeclaration",
                      "scope": 553,
                      "src": "12748:12:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 522,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "12748:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 528,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 525,
                        "name": "employee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 517,
                        "src": "12794:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                          "typeString": "struct Payroll.Employee storage pointer"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "66616c7365",
                        "id": 526,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "bool",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "12804:5:0",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "value": "false"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                          "typeString": "struct Payroll.Employee storage pointer"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 524,
                      "name": "_getOwedSalarySinceLastPayroll",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1849,
                      "src": "12763:30:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_Employee_$156_storage_ptr_$_t_bool_$returns$_t_uint256_$",
                        "typeString": "function (struct Payroll.Employee storage pointer,bool) view returns (uint256)"
                      }
                    },
                    "id": 527,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12763:47:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "12748:62:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 530,
                        "name": "_employeeId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 497,
                        "src": "12838:11:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 531,
                        "name": "owed",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 523,
                        "src": "12851:4:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 529,
                      "name": "_addAccruedSalary",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1283,
                      "src": "12820:17:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (uint256,uint256)"
                      }
                    },
                    "id": 532,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12820:36:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 533,
                  "nodeType": "ExpressionStatement",
                  "src": "12820:36:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 539,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 534,
                        "name": "employee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 517,
                        "src": "12935:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                          "typeString": "struct Payroll.Employee storage pointer"
                        }
                      },
                      "id": 536,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "lastPayroll",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 146,
                      "src": "12935:20:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 537,
                        "name": "getTimestamp64",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11199,
                        "src": "12958:14:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$__$returns$_t_uint64_$",
                          "typeString": "function () view returns (uint64)"
                        }
                      },
                      "id": 538,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "12958:16:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "12935:39:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 540,
                  "nodeType": "ExpressionStatement",
                  "src": "12935:39:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 545,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 541,
                        "name": "employee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 517,
                        "src": "12984:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                          "typeString": "struct Payroll.Employee storage pointer"
                        }
                      },
                      "id": 543,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "denominationTokenSalary",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 138,
                      "src": "12984:32:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 544,
                      "name": "_denominationSalary",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 499,
                      "src": "13019:19:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "12984:54:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 546,
                  "nodeType": "ExpressionStatement",
                  "src": "12984:54:0"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 548,
                        "name": "_employeeId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 497,
                        "src": "13072:11:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 549,
                        "name": "_denominationSalary",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 499,
                        "src": "13085:19:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 547,
                      "name": "SetEmployeeSalary",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 202,
                      "src": "13054:17:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (uint256,uint256)"
                      }
                    },
                    "id": 550,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13054:51:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 551,
                  "nodeType": "EmitStatement",
                  "src": "13049:56:0"
                }
              ]
            },
            "documentation": "@notice Set employee #`_employeeId`'s salary to `_denominationSalary` per second\n@dev This reverts if either the employee's owed salary or accrued salary overflows, to avoid\n     losing any accrued salary for an employee due to the employer changing their salary.\n@param _employeeId Employee's identifier\n@param _denominationSalary Employee's new salary, per second in denomination token",
            "id": 553,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 502,
                    "name": "SET_EMPLOYEE_SALARY_ROLE",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 32,
                    "src": "12450:24:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 504,
                        "name": "_employeeId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 497,
                        "src": "12480:11:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 505,
                        "name": "_denominationSalary",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 499,
                        "src": "12493:19:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 506,
                            "name": "employees",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 170,
                            "src": "12514:9:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Employee_$156_storage_$",
                              "typeString": "mapping(uint256 => struct Payroll.Employee storage ref)"
                            }
                          },
                          "id": 508,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 507,
                            "name": "_employeeId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 497,
                            "src": "12524:11:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "12514:22:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Employee_$156_storage",
                            "typeString": "struct Payroll.Employee storage ref"
                          }
                        },
                        "id": 509,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "denominationTokenSalary",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 138,
                        "src": "12514:46:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 503,
                      "name": "arr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        9167,
                        9182,
                        9202,
                        9217,
                        9237,
                        9258,
                        9282,
                        9302,
                        9331,
                        9356,
                        9381,
                        9404,
                        9435,
                        9474,
                        9521,
                        9576
                      ],
                      "referencedDeclaration": 9474,
                      "src": "12476:3:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$",
                        "typeString": "function (uint256,uint256,uint256) pure returns (uint256[] memory)"
                      }
                    },
                    "id": 510,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12476:85:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                      "typeString": "uint256[] memory"
                    }
                  }
                ],
                "id": 511,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 501,
                  "name": "authP",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 10428,
                  "src": "12444:5:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$_t_array$_t_uint256_$dyn_memory_ptr_$",
                    "typeString": "modifier (bytes32,uint256[] memory)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "12444:118:0"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 513,
                    "name": "_employeeId",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 497,
                    "src": "12586:11:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                ],
                "id": 514,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 512,
                  "name": "employeeActive",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 286,
                  "src": "12571:14:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_uint256_$",
                    "typeString": "modifier (uint256)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "12571:27:0"
              }
            ],
            "name": "setEmployeeSalary",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 500,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 497,
                  "name": "_employeeId",
                  "nodeType": "VariableDeclaration",
                  "scope": 553,
                  "src": "12369:19:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 496,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "12369:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 499,
                  "name": "_denominationSalary",
                  "nodeType": "VariableDeclaration",
                  "scope": 553,
                  "src": "12390:27:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 498,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "12390:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12368:50:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 515,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "12603:0:0"
            },
            "scope": 1984,
            "src": "12342:770:0",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 577,
              "nodeType": "Block",
              "src": "13512:58:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 573,
                        "name": "_employeeId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 555,
                        "src": "13541:11:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 574,
                        "name": "_endDate",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 557,
                        "src": "13554:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      ],
                      "id": 572,
                      "name": "_terminateEmployee",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1352,
                      "src": "13522:18:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_uint64_$returns$__$",
                        "typeString": "function (uint256,uint64)"
                      }
                    },
                    "id": 575,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13522:41:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 576,
                  "nodeType": "ExpressionStatement",
                  "src": "13522:41:0"
                }
              ]
            },
            "documentation": "@notice Terminate employee #`_employeeId` on `@formatDate(_endDate)`\n@param _employeeId Employee's identifier\n@param _endDate Termination timestamp in seconds",
            "id": 578,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 560,
                    "name": "TERMINATE_EMPLOYEE_ROLE",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 29,
                    "src": "13410:23:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 562,
                        "name": "_employeeId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 555,
                        "src": "13439:11:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 564,
                            "name": "_endDate",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 557,
                            "src": "13460:8:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          ],
                          "id": 563,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "13452:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          },
                          "typeName": "uint256"
                        },
                        "id": 565,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "13452:17:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 561,
                      "name": "arr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        9167,
                        9182,
                        9202,
                        9217,
                        9237,
                        9258,
                        9282,
                        9302,
                        9331,
                        9356,
                        9381,
                        9404,
                        9435,
                        9474,
                        9521,
                        9576
                      ],
                      "referencedDeclaration": 9435,
                      "src": "13435:3:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256[] memory)"
                      }
                    },
                    "id": 566,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13435:35:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                      "typeString": "uint256[] memory"
                    }
                  }
                ],
                "id": 567,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 559,
                  "name": "authP",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 10428,
                  "src": "13404:5:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$_t_array$_t_uint256_$dyn_memory_ptr_$",
                    "typeString": "modifier (bytes32,uint256[] memory)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "13404:67:0"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 569,
                    "name": "_employeeId",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 555,
                    "src": "13495:11:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                ],
                "id": 570,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 568,
                  "name": "employeeActive",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 286,
                  "src": "13480:14:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_uint256_$",
                    "typeString": "modifier (uint256)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "13480:27:0"
              }
            ],
            "name": "terminateEmployee",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 558,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 555,
                  "name": "_employeeId",
                  "nodeType": "VariableDeclaration",
                  "scope": 578,
                  "src": "13341:19:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 554,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "13341:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 557,
                  "name": "_endDate",
                  "nodeType": "VariableDeclaration",
                  "scope": 578,
                  "src": "13362:15:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 556,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "13362:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "13340:38:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 571,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "13512:0:0"
            },
            "scope": 1984,
            "src": "13314:256:0",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 617,
              "nodeType": "Block",
              "src": "14116:451:0",
              "statements": [
                {
                  "assignments": [
                    588
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 588,
                      "name": "employeeId",
                      "nodeType": "VariableDeclaration",
                      "scope": 618,
                      "src": "14126:18:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 587,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "14126:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 593,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 589,
                      "name": "employeeIds",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 174,
                      "src": "14147:11:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                        "typeString": "mapping(address => uint256)"
                      }
                    },
                    "id": 592,
                    "indexExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 590,
                        "name": "msg",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 15153,
                        "src": "14159:3:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_message",
                          "typeString": "msg"
                        }
                      },
                      "id": 591,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sender",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "14159:10:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "14147:23:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "14126:44:0"
                },
                {
                  "assignments": [
                    595
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 595,
                      "name": "oldAddress",
                      "nodeType": "VariableDeclaration",
                      "scope": 618,
                      "src": "14180:18:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 594,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "14180:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 600,
                  "initialValue": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 596,
                        "name": "employees",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 170,
                        "src": "14201:9:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Employee_$156_storage_$",
                          "typeString": "mapping(uint256 => struct Payroll.Employee storage ref)"
                        }
                      },
                      "id": 598,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 597,
                        "name": "employeeId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 588,
                        "src": "14211:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "14201:21:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Employee_$156_storage",
                        "typeString": "struct Payroll.Employee storage ref"
                      }
                    },
                    "id": 599,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "accountAddress",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 136,
                    "src": "14201:36:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "14180:57:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 602,
                        "name": "employeeId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 588,
                        "src": "14268:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 603,
                        "name": "_newAccountAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 580,
                        "src": "14280:18:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 601,
                      "name": "_setEmployeeAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1324,
                      "src": "14248:19:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_address_$returns$__$",
                        "typeString": "function (uint256,address)"
                      }
                    },
                    "id": 604,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14248:51:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 605,
                  "nodeType": "ExpressionStatement",
                  "src": "14248:51:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 609,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "delete",
                    "prefix": true,
                    "src": "14447:30:0",
                    "subExpression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 606,
                        "name": "employeeIds",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 174,
                        "src": "14454:11:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 608,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 607,
                        "name": "oldAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 595,
                        "src": "14466:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "14454:23:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 610,
                  "nodeType": "ExpressionStatement",
                  "src": "14447:30:0"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 612,
                        "name": "employeeId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 588,
                        "src": "14517:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 613,
                        "name": "_newAccountAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 580,
                        "src": "14529:18:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 614,
                        "name": "oldAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 595,
                        "src": "14549:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 611,
                      "name": "ChangeAddressByEmployee",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 228,
                      "src": "14493:23:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_address_$_t_address_$returns$__$",
                        "typeString": "function (uint256,address,address)"
                      }
                    },
                    "id": 615,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14493:67:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 616,
                  "nodeType": "EmitStatement",
                  "src": "14488:72:0"
                }
              ]
            },
            "documentation": "@notice Change your employee account address to `_newAccountAddress`\n@dev Initialization check is implicitly provided by `employeeMatches` as new employees can\n     only be added via `addEmployee(),` which requires initialization.\n     As the employee is allowed to call this, we enforce non-reentrancy.\n@param _newAccountAddress New address to receive payments for the requesting employee",
            "id": 618,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 583,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 582,
                  "name": "employeeMatches",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 304,
                  "src": "14087:15:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "14087:15:0"
              },
              {
                "arguments": null,
                "id": 585,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 584,
                  "name": "nonReentrant",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 10907,
                  "src": "14103:12:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "14103:12:0"
              }
            ],
            "name": "changeAddressByEmployee",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 581,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 580,
                  "name": "_newAccountAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 618,
                  "src": "14050:26:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 579,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "14050:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "14049:28:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 586,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "14116:0:0"
            },
            "scope": 1984,
            "src": "14017:550:0",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 736,
              "nodeType": "Block",
              "src": "15223:1052:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 635,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 632,
                            "name": "_tokens",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 621,
                            "src": "15279:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                              "typeString": "address[] calldata"
                            }
                          },
                          "id": 633,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "15279:14:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 634,
                          "name": "MAX_ALLOWED_TOKENS",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 50,
                          "src": "15297:18:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "15279:36:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 636,
                        "name": "ERROR_MAX_ALLOWED_TOKENS",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 85,
                        "src": "15317:24:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 631,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        15156,
                        15157
                      ],
                      "referencedDeclaration": 15157,
                      "src": "15271:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 637,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15271:71:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 638,
                  "nodeType": "ExpressionStatement",
                  "src": "15271:71:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 644,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 640,
                            "name": "_tokens",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 621,
                            "src": "15360:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                              "typeString": "address[] calldata"
                            }
                          },
                          "id": 641,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "15360:14:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 642,
                            "name": "_distribution",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 624,
                            "src": "15378:13:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                              "typeString": "uint256[] calldata"
                            }
                          },
                          "id": 643,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "15378:20:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "15360:38:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 645,
                        "name": "ERROR_TOKEN_ALLOCATION_MISMATCH",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 91,
                        "src": "15400:31:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 639,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        15156,
                        15157
                      ],
                      "referencedDeclaration": 15157,
                      "src": "15352:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 646,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15352:80:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 647,
                  "nodeType": "ExpressionStatement",
                  "src": "15352:80:0"
                },
                {
                  "assignments": [
                    649
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 649,
                      "name": "employeeId",
                      "nodeType": "VariableDeclaration",
                      "scope": 737,
                      "src": "15443:18:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 648,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "15443:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 654,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 650,
                      "name": "employeeIds",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 174,
                      "src": "15464:11:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                        "typeString": "mapping(address => uint256)"
                      }
                    },
                    "id": 653,
                    "indexExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 651,
                        "name": "msg",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 15153,
                        "src": "15476:3:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_message",
                          "typeString": "msg"
                        }
                      },
                      "id": 652,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sender",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "15476:10:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "15464:23:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "15443:44:0"
                },
                {
                  "assignments": [
                    656
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 656,
                      "name": "employee",
                      "nodeType": "VariableDeclaration",
                      "scope": 737,
                      "src": "15497:25:0",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                        "typeString": "struct Payroll.Employee"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 655,
                        "name": "Employee",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 156,
                        "src": "15497:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                          "typeString": "struct Payroll.Employee"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 660,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 657,
                      "name": "employees",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 170,
                      "src": "15525:9:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Employee_$156_storage_$",
                        "typeString": "mapping(uint256 => struct Payroll.Employee storage ref)"
                      }
                    },
                    "id": 659,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 658,
                      "name": "employeeId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 649,
                      "src": "15535:10:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "15525:21:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Employee_$156_storage",
                      "typeString": "struct Payroll.Employee storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "15497:49:0"
                },
                {
                  "assignments": [
                    664
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 664,
                      "name": "previousAllowedTokenAddresses",
                      "nodeType": "VariableDeclaration",
                      "scope": 737,
                      "src": "15602:46:0",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                        "typeString": "address[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 662,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "15602:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 663,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "15602:9:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                          "typeString": "address[]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 667,
                  "initialValue": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 665,
                      "name": "employee",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 656,
                      "src": "15651:8:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                        "typeString": "struct Payroll.Employee storage pointer"
                      }
                    },
                    "id": 666,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "allocationTokenAddresses",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 151,
                    "src": "15651:33:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage",
                      "typeString": "address[] storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "15602:82:0"
                },
                {
                  "body": {
                    "id": 687,
                    "nodeType": "Block",
                    "src": "15761:91:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 685,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "delete",
                          "prefix": true,
                          "src": "15775:66:0",
                          "subExpression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 679,
                                "name": "employee",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 656,
                                "src": "15782:8:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                                  "typeString": "struct Payroll.Employee storage pointer"
                                }
                              },
                              "id": 680,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "allocationTokens",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 155,
                              "src": "15782:25:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 684,
                            "indexExpression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 681,
                                "name": "previousAllowedTokenAddresses",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 664,
                                "src": "15808:29:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                  "typeString": "address[] memory"
                                }
                              },
                              "id": 683,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 682,
                                "name": "j",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 669,
                                "src": "15838:1:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "15808:32:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "15782:59:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 686,
                        "nodeType": "ExpressionStatement",
                        "src": "15775:66:0"
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 675,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 672,
                      "name": "j",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 669,
                      "src": "15714:1:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 673,
                        "name": "previousAllowedTokenAddresses",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 664,
                        "src": "15718:29:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        }
                      },
                      "id": 674,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "15718:36:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "15714:40:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 688,
                  "initializationExpression": {
                    "assignments": [
                      669
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 669,
                        "name": "j",
                        "nodeType": "VariableDeclaration",
                        "scope": 737,
                        "src": "15699:9:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 668,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "15699:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 671,
                    "initialValue": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 670,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "15711:1:0",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "15699:13:0"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 677,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "15756:3:0",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 676,
                        "name": "j",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 669,
                        "src": "15756:1:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 678,
                    "nodeType": "ExpressionStatement",
                    "src": "15756:3:0"
                  },
                  "nodeType": "ForStatement",
                  "src": "15694:158:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 691,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "delete",
                    "prefix": true,
                    "src": "15861:40:0",
                    "subExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 689,
                        "name": "employee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 656,
                        "src": "15868:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                          "typeString": "struct Payroll.Employee storage pointer"
                        }
                      },
                      "id": 690,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "allocationTokenAddresses",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 151,
                      "src": "15868:33:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_address_$dyn_storage",
                        "typeString": "address[] storage ref"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 692,
                  "nodeType": "ExpressionStatement",
                  "src": "15861:40:0"
                },
                {
                  "body": {
                    "id": 726,
                    "nodeType": "Block",
                    "src": "16019:145:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 709,
                                "name": "_tokens",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 621,
                                "src": "16072:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                  "typeString": "address[] calldata"
                                }
                              },
                              "id": 711,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 710,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 694,
                                "src": "16080:1:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "16072:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 704,
                                "name": "employee",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 656,
                                "src": "16033:8:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                                  "typeString": "struct Payroll.Employee storage pointer"
                                }
                              },
                              "id": 707,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "allocationTokenAddresses",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 151,
                              "src": "16033:33:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_address_$dyn_storage",
                                "typeString": "address[] storage ref"
                              }
                            },
                            "id": 708,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "push",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "16033:38:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_arraypush_nonpayable$_t_address_$returns$_t_uint256_$",
                              "typeString": "function (address) returns (uint256)"
                            }
                          },
                          "id": 712,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "16033:50:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 713,
                        "nodeType": "ExpressionStatement",
                        "src": "16033:50:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 724,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 714,
                                "name": "employee",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 656,
                                "src": "16097:8:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                                  "typeString": "struct Payroll.Employee storage pointer"
                                }
                              },
                              "id": 719,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "allocationTokens",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 155,
                              "src": "16097:25:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 720,
                            "indexExpression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 716,
                                "name": "_tokens",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 621,
                                "src": "16123:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                  "typeString": "address[] calldata"
                                }
                              },
                              "id": 718,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 717,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 694,
                                "src": "16131:1:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "16123:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "16097:37:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 721,
                              "name": "_distribution",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 624,
                              "src": "16137:13:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                                "typeString": "uint256[] calldata"
                              }
                            },
                            "id": 723,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 722,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 694,
                              "src": "16151:1:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "16137:16:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "16097:56:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 725,
                        "nodeType": "ExpressionStatement",
                        "src": "16097:56:0"
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 700,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 697,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 694,
                      "src": "15994:1:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 698,
                        "name": "_tokens",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 621,
                        "src": "15998:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                          "typeString": "address[] calldata"
                        }
                      },
                      "id": 699,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "15998:14:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "15994:18:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 727,
                  "initializationExpression": {
                    "assignments": [
                      694
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 694,
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "scope": 737,
                        "src": "15979:9:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 693,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "15979:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 696,
                    "initialValue": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 695,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "15991:1:0",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "15979:13:0"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 702,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "16014:3:0",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 701,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 694,
                        "src": "16014:1:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 703,
                    "nodeType": "ExpressionStatement",
                    "src": "16014:3:0"
                  },
                  "nodeType": "ForStatement",
                  "src": "15974:190:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 729,
                        "name": "employee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 656,
                        "src": "16213:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                          "typeString": "struct Payroll.Employee storage pointer"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                          "typeString": "struct Payroll.Employee storage pointer"
                        }
                      ],
                      "id": 728,
                      "name": "_ensureEmployeeTokenAllocationsIsValid",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1735,
                      "src": "16174:38:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_Employee_$156_storage_ptr_$returns$__$",
                        "typeString": "function (struct Payroll.Employee storage pointer) view"
                      }
                    },
                    "id": 730,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16174:48:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 731,
                  "nodeType": "ExpressionStatement",
                  "src": "16174:48:0"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 733,
                        "name": "employeeId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 649,
                        "src": "16257:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 732,
                      "name": "DetermineAllocation",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 232,
                      "src": "16237:19:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$returns$__$",
                        "typeString": "function (uint256)"
                      }
                    },
                    "id": 734,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16237:31:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 735,
                  "nodeType": "EmitStatement",
                  "src": "16232:36:0"
                }
              ]
            },
            "documentation": "@notice Set the token distribution for your payments\n@dev Initialization check is implicitly provided by `employeeMatches` as new employees can\n     only be added via `addEmployee(),` which requires initialization.\n     As the employee is allowed to call this, we enforce non-reentrancy.\n@param _tokens Array of token addresses; they must belong to the list of allowed tokens\n@param _distribution Array with each token's corresponding proportions (must be integers summing to 100)",
            "id": 737,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 627,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 626,
                  "name": "employeeMatches",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 304,
                  "src": "15194:15:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "15194:15:0"
              },
              {
                "arguments": null,
                "id": 629,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 628,
                  "name": "nonReentrant",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 10907,
                  "src": "15210:12:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "15210:12:0"
              }
            ],
            "name": "determineAllocation",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 625,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 621,
                  "name": "_tokens",
                  "nodeType": "VariableDeclaration",
                  "scope": 737,
                  "src": "15141:17:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 619,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "15141:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 620,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "15141:9:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 624,
                  "name": "_distribution",
                  "nodeType": "VariableDeclaration",
                  "scope": 737,
                  "src": "15160:23:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 622,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "15160:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 623,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "15160:9:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "15140:44:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 630,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "15223:0:0"
            },
            "scope": 1984,
            "src": "15112:1163:0",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 883,
              "nodeType": "Block",
              "src": "17169:1766:0",
              "statements": [
                {
                  "assignments": [],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 752,
                      "name": "paymentAmount",
                      "nodeType": "VariableDeclaration",
                      "scope": 884,
                      "src": "17179:21:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 751,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "17179:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 753,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "17179:21:0"
                },
                {
                  "assignments": [
                    755
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 755,
                      "name": "employeeId",
                      "nodeType": "VariableDeclaration",
                      "scope": 884,
                      "src": "17210:18:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 754,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "17210:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 760,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 756,
                      "name": "employeeIds",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 174,
                      "src": "17231:11:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                        "typeString": "mapping(address => uint256)"
                      }
                    },
                    "id": 759,
                    "indexExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 757,
                        "name": "msg",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 15153,
                        "src": "17243:3:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_message",
                          "typeString": "msg"
                        }
                      },
                      "id": 758,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sender",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "17243:10:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "17231:23:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "17210:44:0"
                },
                {
                  "assignments": [
                    762
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 762,
                      "name": "employee",
                      "nodeType": "VariableDeclaration",
                      "scope": 884,
                      "src": "17264:25:0",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                        "typeString": "struct Payroll.Employee"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 761,
                        "name": "Employee",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 156,
                        "src": "17264:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                          "typeString": "struct Payroll.Employee"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 766,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 763,
                      "name": "employees",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 170,
                      "src": "17292:9:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Employee_$156_storage_$",
                        "typeString": "mapping(uint256 => struct Payroll.Employee storage ref)"
                      }
                    },
                    "id": 765,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 764,
                      "name": "employeeId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 755,
                      "src": "17302:10:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "17292:21:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Employee_$156_storage",
                      "typeString": "struct Payroll.Employee storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "17264:49:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 768,
                        "name": "employee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 762,
                        "src": "17362:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                          "typeString": "struct Payroll.Employee storage pointer"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                          "typeString": "struct Payroll.Employee storage pointer"
                        }
                      ],
                      "id": 767,
                      "name": "_ensureEmployeeTokenAllocationsIsValid",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1735,
                      "src": "17323:38:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_Employee_$156_storage_ptr_$returns$__$",
                        "typeString": "function (struct Payroll.Employee storage pointer) view"
                      }
                    },
                    "id": 769,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17323:48:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 770,
                  "nodeType": "ExpressionStatement",
                  "src": "17323:48:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 782,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 775,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 772,
                              "name": "_minRates",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 744,
                              "src": "17389:9:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                                "typeString": "uint256[] calldata"
                              }
                            },
                            "id": 773,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "17389:16:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 774,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "17409:1:0",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "17389:21:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "||",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 781,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 776,
                              "name": "_minRates",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 744,
                              "src": "17414:9:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                                "typeString": "uint256[] calldata"
                              }
                            },
                            "id": 777,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "17414:16:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 778,
                                "name": "employee",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 762,
                                "src": "17434:8:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                                  "typeString": "struct Payroll.Employee storage pointer"
                                }
                              },
                              "id": 779,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "allocationTokenAddresses",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 151,
                              "src": "17434:33:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_address_$dyn_storage",
                                "typeString": "address[] storage ref"
                              }
                            },
                            "id": 780,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "17434:40:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "17414:60:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "17389:85:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 783,
                        "name": "ERROR_MIN_RATES_MISMATCH",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 88,
                        "src": "17476:24:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 771,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        15156,
                        15157
                      ],
                      "referencedDeclaration": 15157,
                      "src": "17381:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 784,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17381:120:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 785,
                  "nodeType": "ExpressionStatement",
                  "src": "17381:120:0"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_PaymentType_$134",
                      "typeString": "enum Payroll.PaymentType"
                    },
                    "id": 789,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 786,
                      "name": "_type",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 739,
                      "src": "17559:5:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_PaymentType_$134",
                        "typeString": "enum Payroll.PaymentType"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 787,
                        "name": "PaymentType",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 134,
                        "src": "17568:11:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_PaymentType_$134_$",
                          "typeString": "type(enum Payroll.PaymentType)"
                        }
                      },
                      "id": 788,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "Payroll",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "17568:19:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_PaymentType_$134",
                        "typeString": "enum Payroll.PaymentType"
                      }
                    },
                    "src": "17559:28:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "condition": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_enum$_PaymentType_$134",
                        "typeString": "enum Payroll.PaymentType"
                      },
                      "id": 812,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 809,
                        "name": "_type",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 739,
                        "src": "18124:5:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_PaymentType_$134",
                          "typeString": "enum Payroll.PaymentType"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 810,
                          "name": "PaymentType",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 134,
                          "src": "18133:11:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_enum$_PaymentType_$134_$",
                            "typeString": "type(enum Payroll.PaymentType)"
                          }
                        },
                        "id": 811,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberName": "Reimbursement",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "18133:25:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_PaymentType_$134",
                          "typeString": "enum Payroll.PaymentType"
                        }
                      },
                      "src": "18124:34:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseBody": {
                      "condition": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_enum$_PaymentType_$134",
                          "typeString": "enum Payroll.PaymentType"
                        },
                        "id": 838,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 835,
                          "name": "_type",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 739,
                          "src": "18412:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_PaymentType_$134",
                            "typeString": "enum Payroll.PaymentType"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 836,
                            "name": "PaymentType",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 134,
                            "src": "18421:11:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_enum$_PaymentType_$134_$",
                              "typeString": "type(enum Payroll.PaymentType)"
                            }
                          },
                          "id": 837,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "Bonus",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "18421:17:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_PaymentType_$134",
                            "typeString": "enum Payroll.PaymentType"
                          }
                        },
                        "src": "18412:26:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "falseBody": {
                        "id": 865,
                        "nodeType": "Block",
                        "src": "18661:59:0",
                        "statements": [
                          {
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 862,
                                  "name": "ERROR_INVALID_PAYMENT_TYPE",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 100,
                                  "src": "18682:26:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_string_memory",
                                    "typeString": "string memory"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_string_memory",
                                    "typeString": "string memory"
                                  }
                                ],
                                "id": 861,
                                "name": "revert",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [
                                  15158,
                                  15159
                                ],
                                "referencedDeclaration": 15159,
                                "src": "18675:6:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
                                  "typeString": "function (string memory) pure"
                                }
                              },
                              "id": 863,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "18675:34:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$__$",
                                "typeString": "tuple()"
                              }
                            },
                            "id": 864,
                            "nodeType": "ExpressionStatement",
                            "src": "18675:34:0"
                          }
                        ]
                      },
                      "id": 866,
                      "nodeType": "IfStatement",
                      "src": "18408:312:0",
                      "trueBody": {
                        "id": 860,
                        "nodeType": "Block",
                        "src": "18440:215:0",
                        "statements": [
                          {
                            "assignments": [
                              840
                            ],
                            "declarations": [
                              {
                                "constant": false,
                                "id": 840,
                                "name": "owedBonusAmount",
                                "nodeType": "VariableDeclaration",
                                "scope": 884,
                                "src": "18454:23:0",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "typeName": {
                                  "id": 839,
                                  "name": "uint256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "18454:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "value": null,
                                "visibility": "internal"
                              }
                            ],
                            "id": 843,
                            "initialValue": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 841,
                                "name": "employee",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 762,
                                "src": "18480:8:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                                  "typeString": "struct Payroll.Employee storage pointer"
                                }
                              },
                              "id": 842,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "bonus",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 142,
                              "src": "18480:14:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "VariableDeclarationStatement",
                            "src": "18454:40:0"
                          },
                          {
                            "expression": {
                              "argumentTypes": null,
                              "id": 849,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "argumentTypes": null,
                                "id": 844,
                                "name": "paymentAmount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 752,
                                "src": "18508:13:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 846,
                                    "name": "owedBonusAmount",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 840,
                                    "src": "18545:15:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 847,
                                    "name": "_requestedAmount",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 741,
                                    "src": "18562:16:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 845,
                                  "name": "_ensurePaymentAmount",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1983,
                                  "src": "18524:20:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                    "typeString": "function (uint256,uint256) pure returns (uint256)"
                                  }
                                },
                                "id": 848,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "18524:55:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "18508:71:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 850,
                            "nodeType": "ExpressionStatement",
                            "src": "18508:71:0"
                          },
                          {
                            "expression": {
                              "argumentTypes": null,
                              "id": 858,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 851,
                                  "name": "employee",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 762,
                                  "src": "18593:8:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                                    "typeString": "struct Payroll.Employee storage pointer"
                                  }
                                },
                                "id": 853,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": true,
                                "memberName": "bonus",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 142,
                                "src": "18593:14:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 856,
                                    "name": "paymentAmount",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 752,
                                    "src": "18630:13:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 854,
                                    "name": "owedBonusAmount",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 840,
                                    "src": "18610:15:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 855,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "sub",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 14017,
                                  "src": "18610:19:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                    "typeString": "function (uint256,uint256) pure returns (uint256)"
                                  }
                                },
                                "id": 857,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "18610:34:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "18593:51:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 859,
                            "nodeType": "ExpressionStatement",
                            "src": "18593:51:0"
                          }
                        ]
                      }
                    },
                    "id": 867,
                    "nodeType": "IfStatement",
                    "src": "18120:600:0",
                    "trueBody": {
                      "id": 834,
                      "nodeType": "Block",
                      "src": "18160:242:0",
                      "statements": [
                        {
                          "assignments": [
                            814
                          ],
                          "declarations": [
                            {
                              "constant": false,
                              "id": 814,
                              "name": "owedReimbursements",
                              "nodeType": "VariableDeclaration",
                              "scope": 884,
                              "src": "18174:26:0",
                              "stateVariable": false,
                              "storageLocation": "default",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "typeName": {
                                "id": 813,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "18174:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "value": null,
                              "visibility": "internal"
                            }
                          ],
                          "id": 817,
                          "initialValue": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 815,
                              "name": "employee",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 762,
                              "src": "18203:8:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                                "typeString": "struct Payroll.Employee storage pointer"
                              }
                            },
                            "id": 816,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "reimbursements",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 144,
                            "src": "18203:23:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "VariableDeclarationStatement",
                          "src": "18174:52:0"
                        },
                        {
                          "expression": {
                            "argumentTypes": null,
                            "id": 823,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "argumentTypes": null,
                              "id": 818,
                              "name": "paymentAmount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 752,
                              "src": "18240:13:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 820,
                                  "name": "owedReimbursements",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 814,
                                  "src": "18277:18:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 821,
                                  "name": "_requestedAmount",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 741,
                                  "src": "18297:16:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 819,
                                "name": "_ensurePaymentAmount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1983,
                                "src": "18256:20:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                  "typeString": "function (uint256,uint256) pure returns (uint256)"
                                }
                              },
                              "id": 822,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "18256:58:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "18240:74:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 824,
                          "nodeType": "ExpressionStatement",
                          "src": "18240:74:0"
                        },
                        {
                          "expression": {
                            "argumentTypes": null,
                            "id": 832,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 825,
                                "name": "employee",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 762,
                                "src": "18328:8:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                                  "typeString": "struct Payroll.Employee storage pointer"
                                }
                              },
                              "id": 827,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "memberName": "reimbursements",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 144,
                              "src": "18328:23:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 830,
                                  "name": "paymentAmount",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 752,
                                  "src": "18377:13:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 828,
                                  "name": "owedReimbursements",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 814,
                                  "src": "18354:18:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 829,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sub",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 14017,
                                "src": "18354:22:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                  "typeString": "function (uint256,uint256) pure returns (uint256)"
                                }
                              },
                              "id": 831,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "18354:37:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "18328:63:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 833,
                          "nodeType": "ExpressionStatement",
                          "src": "18328:63:0"
                        }
                      ]
                    }
                  },
                  "id": 868,
                  "nodeType": "IfStatement",
                  "src": "17555:1165:0",
                  "trueBody": {
                    "id": 808,
                    "nodeType": "Block",
                    "src": "17589:525:0",
                    "statements": [
                      {
                        "assignments": [
                          791
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 791,
                            "name": "totalOwedSalary",
                            "nodeType": "VariableDeclaration",
                            "scope": 884,
                            "src": "17876:23:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 790,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "17876:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 795,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 793,
                              "name": "employee",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 762,
                              "src": "17928:8:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                                "typeString": "struct Payroll.Employee storage pointer"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                                "typeString": "struct Payroll.Employee storage pointer"
                              }
                            ],
                            "id": 792,
                            "name": "_getTotalOwedCappedSalary",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1916,
                            "src": "17902:25:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_struct$_Employee_$156_storage_ptr_$returns$_t_uint256_$",
                              "typeString": "function (struct Payroll.Employee storage pointer) view returns (uint256)"
                            }
                          },
                          "id": 794,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "17902:35:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "17876:61:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 801,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 796,
                            "name": "paymentAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 752,
                            "src": "17951:13:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 798,
                                "name": "totalOwedSalary",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 791,
                                "src": "17988:15:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 799,
                                "name": "_requestedAmount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 741,
                                "src": "18005:16:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 797,
                              "name": "_ensurePaymentAmount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1983,
                              "src": "17967:20:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 800,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "17967:55:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "17951:71:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 802,
                        "nodeType": "ExpressionStatement",
                        "src": "17951:71:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 804,
                              "name": "employee",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 762,
                              "src": "18079:8:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                                "typeString": "struct Payroll.Employee storage pointer"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 805,
                              "name": "paymentAmount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 752,
                              "src": "18089:13:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                                "typeString": "struct Payroll.Employee storage pointer"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 803,
                            "name": "_updateEmployeeAccountingBasedOnPaidSalary",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1658,
                            "src": "18036:42:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Employee_$156_storage_ptr_$_t_uint256_$returns$__$",
                              "typeString": "function (struct Payroll.Employee storage pointer,uint256)"
                            }
                          },
                          "id": 806,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "18036:67:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 807,
                        "nodeType": "ExpressionStatement",
                        "src": "18036:67:0"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 871,
                            "name": "employeeId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 755,
                            "src": "18804:10:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 872,
                            "name": "_type",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 739,
                            "src": "18816:5:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_PaymentType_$134",
                              "typeString": "enum Payroll.PaymentType"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 873,
                            "name": "paymentAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 752,
                            "src": "18823:13:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 874,
                            "name": "_minRates",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 744,
                            "src": "18838:9:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                              "typeString": "uint256[] calldata"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_enum$_PaymentType_$134",
                              "typeString": "enum Payroll.PaymentType"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                              "typeString": "uint256[] calldata"
                            }
                          ],
                          "id": 870,
                          "name": "_transferTokensAmount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1498,
                          "src": "18782:21:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_enum$_PaymentType_$134_$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_bool_$",
                            "typeString": "function (uint256,enum Payroll.PaymentType,uint256,uint256[] memory) returns (bool)"
                          }
                        },
                        "id": 875,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "18782:66:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 876,
                        "name": "ERROR_NOTHING_PAID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 103,
                        "src": "18850:18:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 869,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        15156,
                        15157
                      ],
                      "referencedDeclaration": 15157,
                      "src": "18774:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 877,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18774:95:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 878,
                  "nodeType": "ExpressionStatement",
                  "src": "18774:95:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 880,
                        "name": "employeeId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 755,
                        "src": "18917:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 879,
                      "name": "_removeEmployeeIfTerminatedAndPaidOut",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1544,
                      "src": "18879:37:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$__$",
                        "typeString": "function (uint256)"
                      }
                    },
                    "id": 881,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18879:49:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 882,
                  "nodeType": "ExpressionStatement",
                  "src": "18879:49:0"
                }
              ]
            },
            "documentation": "@notice Request your `_type == 0 ? 'salary' : _type == 1 ? 'reimbursements' : 'bonus'`\n@dev Reverts if no payments were made.\n     Initialization check is implicitly provided by `employeeMatches` as new employees can\n     only be added via `addEmployee(),` which requires initialization.\n     As the employee is allowed to call this, we enforce non-reentrancy.\n@param _type Payment type being requested (Payroll, Reimbursement or Bonus)\n@param _requestedAmount Requested amount to pay for the payment type. Must be less than or equal to total owed amount for the payment type, or zero to request all.\n@param _minRates Array of employee's minimum acceptable rates for their allowed payment tokens",
            "id": 884,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 747,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 746,
                  "name": "employeeMatches",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 304,
                  "src": "17140:15:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "17140:15:0"
              },
              {
                "arguments": null,
                "id": 749,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 748,
                  "name": "nonReentrant",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 10907,
                  "src": "17156:12:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "17156:12:0"
              }
            ],
            "name": "payday",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 745,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 739,
                  "name": "_type",
                  "nodeType": "VariableDeclaration",
                  "scope": 884,
                  "src": "17065:17:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_PaymentType_$134",
                    "typeString": "enum Payroll.PaymentType"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 738,
                    "name": "PaymentType",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 134,
                    "src": "17065:11:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_PaymentType_$134",
                      "typeString": "enum Payroll.PaymentType"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 741,
                  "name": "_requestedAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 884,
                  "src": "17084:24:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 740,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "17084:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 744,
                  "name": "_minRates",
                  "nodeType": "VariableDeclaration",
                  "scope": 884,
                  "src": "17110:19:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 742,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "17110:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 743,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "17110:9:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "17064:66:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 750,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "17169:0:0"
            },
            "scope": 1984,
            "src": "17049:1886:0",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 891,
              "nodeType": "Block",
              "src": "19158:28:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 889,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "19175:4:0",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 888,
                  "id": 890,
                  "nodeType": "Return",
                  "src": "19168:11:0"
                }
              ]
            },
            "documentation": "@dev IForwarder interface conformance. Tells whether the Payroll app is a forwarder or not.\n@return Always true",
            "id": 892,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "isForwarder",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 885,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "19126:2:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 888,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 887,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 892,
                  "src": "19152:4:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 886,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "19152:4:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "19151:6:0"
            },
            "scope": 1984,
            "src": "19106:80:0",
            "stateMutability": "pure",
            "superFunction": 10669,
            "visibility": "external"
          },
          {
            "body": {
              "id": 937,
              "nodeType": "Block",
              "src": "19480:500:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 899,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 15153,
                              "src": "19509:3:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 900,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "19509:10:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 901,
                            "name": "_evmScript",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 894,
                            "src": "19521:10:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          ],
                          "id": 898,
                          "name": "canForward",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [
                            954
                          ],
                          "referencedDeclaration": 954,
                          "src": "19498:10:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_address_$_t_bytes_memory_ptr_$returns$_t_bool_$",
                            "typeString": "function (address,bytes memory) view returns (bool)"
                          }
                        },
                        "id": 902,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "19498:34:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 903,
                        "name": "ERROR_CAN_NOT_FORWARD",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 106,
                        "src": "19534:21:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 897,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        15156,
                        15157
                      ],
                      "referencedDeclaration": 15157,
                      "src": "19490:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 904,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "19490:66:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 905,
                  "nodeType": "ExpressionStatement",
                  "src": "19490:66:0"
                },
                {
                  "assignments": [
                    907
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 907,
                      "name": "input",
                      "nodeType": "VariableDeclaration",
                      "scope": 938,
                      "src": "19566:18:0",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 906,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "19566:5:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 912,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 910,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "19597:1:0",
                        "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": 909,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "19587:9:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_bytes_memory_$",
                        "typeString": "function (uint256) pure returns (bytes memory)"
                      },
                      "typeName": {
                        "id": 908,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "19591:5:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      }
                    },
                    "id": 911,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "19587:12:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory",
                      "typeString": "bytes memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "19566:33:0"
                },
                {
                  "assignments": [
                    916
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 916,
                      "name": "blacklist",
                      "nodeType": "VariableDeclaration",
                      "scope": 938,
                      "src": "19837:26:0",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                        "typeString": "address[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 914,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "19837:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 915,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "19837:9:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                          "typeString": "address[]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 922,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "31",
                        "id": 920,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "19880:1:0",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "1"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        }
                      ],
                      "id": 919,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "19866:13:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_address_$dyn_memory_$",
                        "typeString": "function (uint256) pure returns (address[] memory)"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 917,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "19870:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 918,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "19870:9:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                          "typeString": "address[]"
                        }
                      }
                    },
                    "id": 921,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "19866:16:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_memory",
                      "typeString": "address[] memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "19837:45:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 929,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 923,
                        "name": "blacklist",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 916,
                        "src": "19892:9:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        }
                      },
                      "id": 925,
                      "indexExpression": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 924,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "19902:1:0",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "19892:12:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 927,
                          "name": "finance",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 158,
                          "src": "19915:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_Finance_$5528",
                            "typeString": "contract Finance"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_Finance_$5528",
                            "typeString": "contract Finance"
                          }
                        ],
                        "id": 926,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "19907:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 928,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "19907:16:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "19892:31:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 930,
                  "nodeType": "ExpressionStatement",
                  "src": "19892:31:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 932,
                        "name": "_evmScript",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 894,
                        "src": "19944:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 933,
                        "name": "input",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 907,
                        "src": "19956:5:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 934,
                        "name": "blacklist",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 916,
                        "src": "19963:9:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        }
                      ],
                      "id": 931,
                      "name": "runScript",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11788,
                      "src": "19934:9:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$_t_array$_t_address_$dyn_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                        "typeString": "function (bytes memory,bytes memory,address[] memory) returns (bytes memory)"
                      }
                    },
                    "id": 935,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "19934:39:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "id": 936,
                  "nodeType": "ExpressionStatement",
                  "src": "19934:39:0"
                }
              ]
            },
            "documentation": "@notice Execute desired action as an active employee\n@dev IForwarder interface conformance. Allows active employees to run EVMScripts in the context of the Payroll app.\n@param _evmScript Script being executed",
            "id": 938,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "forward",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 895,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 894,
                  "name": "_evmScript",
                  "nodeType": "VariableDeclaration",
                  "scope": 938,
                  "src": "19455:16:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 893,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "19455:5:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "19454:18:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 896,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "19480:0:0"
            },
            "scope": 1984,
            "src": "19438:542:0",
            "stateMutability": "nonpayable",
            "superFunction": 10683,
            "visibility": "public"
          },
          {
            "body": {
              "id": 953,
              "nodeType": "Block",
              "src": "20333:65:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 948,
                          "name": "employeeIds",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 174,
                          "src": "20370:11:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                            "typeString": "mapping(address => uint256)"
                          }
                        },
                        "id": 950,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 949,
                          "name": "_sender",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 940,
                          "src": "20382:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "20370:20:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 947,
                      "name": "_isEmployeeIdActive",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1763,
                      "src": "20350:19:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_bool_$",
                        "typeString": "function (uint256) view returns (bool)"
                      }
                    },
                    "id": 951,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "20350:41:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 946,
                  "id": 952,
                  "nodeType": "Return",
                  "src": "20343:48:0"
                }
              ]
            },
            "documentation": "@dev IForwarder interface conformance. Tells whether a given address can forward actions or not.\n@param _sender Address of the account intending to forward an action\n@return True if the given address is an active employee, false otherwise",
            "id": 954,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "canForward",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 943,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 940,
                  "name": "_sender",
                  "nodeType": "VariableDeclaration",
                  "scope": 954,
                  "src": "20282:15:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 939,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "20282:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 942,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 954,
                  "src": "20299:5:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 941,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "20299:5:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "20281:24:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 946,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 945,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 954,
                  "src": "20327:4:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 944,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "20327:4:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "20326:6:0"
            },
            "scope": 1984,
            "src": "20262:136:0",
            "stateMutability": "view",
            "superFunction": 10678,
            "visibility": "public"
          },
          {
            "body": {
              "id": 976,
              "nodeType": "Block",
              "src": "20698:142:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 968,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 962,
                            "name": "employeeIds",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 174,
                            "src": "20716:11:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 964,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 963,
                            "name": "_accountAddress",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 956,
                            "src": "20728:15:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "20716:28:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 966,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "20756:1:0",
                              "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": 965,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "20748:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint256_$",
                              "typeString": "type(uint256)"
                            },
                            "typeName": "uint256"
                          },
                          "id": 967,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "20748:10:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "20716:42:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 969,
                        "name": "ERROR_EMPLOYEE_DOESNT_EXIST",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 70,
                        "src": "20760:27:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 961,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        15156,
                        15157
                      ],
                      "referencedDeclaration": 15157,
                      "src": "20708:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 970,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "20708:80:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 971,
                  "nodeType": "ExpressionStatement",
                  "src": "20708:80:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 972,
                      "name": "employeeIds",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 174,
                      "src": "20805:11:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                        "typeString": "mapping(address => uint256)"
                      }
                    },
                    "id": 974,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 973,
                      "name": "_accountAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 956,
                      "src": "20817:15:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "20805:28:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 960,
                  "id": 975,
                  "nodeType": "Return",
                  "src": "20798:35:0"
                }
              ]
            },
            "documentation": "@dev Return employee's identifier by their account address\n@param _accountAddress Employee's address to receive payments\n@return Employee's identifier",
            "id": 977,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getEmployeeIdByAddress",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 957,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 956,
                  "name": "_accountAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 977,
                  "src": "20643:23:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 955,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "20643:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "20642:25:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 960,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 959,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 977,
                  "src": "20689:7:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 958,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "20689:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "20688:9:0"
            },
            "scope": 1984,
            "src": "20611:229:0",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1048,
              "nodeType": "Block",
              "src": "21789:453:0",
              "statements": [
                {
                  "assignments": [
                    1003
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1003,
                      "name": "employee",
                      "nodeType": "VariableDeclaration",
                      "scope": 1049,
                      "src": "21799:25:0",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                        "typeString": "struct Payroll.Employee"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 1002,
                        "name": "Employee",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 156,
                        "src": "21799:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                          "typeString": "struct Payroll.Employee"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1007,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 1004,
                      "name": "employees",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 170,
                      "src": "21827:9:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Employee_$156_storage_$",
                        "typeString": "mapping(uint256 => struct Payroll.Employee storage ref)"
                      }
                    },
                    "id": 1006,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 1005,
                      "name": "_employeeId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 979,
                      "src": "21837:11:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "21827:22:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Employee_$156_storage",
                      "typeString": "struct Payroll.Employee storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "21799:50:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1011,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1008,
                      "name": "accountAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 985,
                      "src": "21860:14:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1009,
                        "name": "employee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1003,
                        "src": "21877:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                          "typeString": "struct Payroll.Employee storage pointer"
                        }
                      },
                      "id": 1010,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "accountAddress",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 136,
                      "src": "21877:23:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "21860:40:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 1012,
                  "nodeType": "ExpressionStatement",
                  "src": "21860:40:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1016,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1013,
                      "name": "denominationSalary",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 987,
                      "src": "21910:18:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1014,
                        "name": "employee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1003,
                        "src": "21931:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                          "typeString": "struct Payroll.Employee storage pointer"
                        }
                      },
                      "id": 1015,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "denominationTokenSalary",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 138,
                      "src": "21931:32:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "21910:53:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1017,
                  "nodeType": "ExpressionStatement",
                  "src": "21910:53:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1021,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1018,
                      "name": "accruedSalary",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 989,
                      "src": "21973:13:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1019,
                        "name": "employee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1003,
                        "src": "21989:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                          "typeString": "struct Payroll.Employee storage pointer"
                        }
                      },
                      "id": 1020,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "accruedSalary",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 140,
                      "src": "21989:22:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "21973:38:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1022,
                  "nodeType": "ExpressionStatement",
                  "src": "21973:38:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1026,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1023,
                      "name": "bonus",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 991,
                      "src": "22021:5:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1024,
                        "name": "employee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1003,
                        "src": "22029:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                          "typeString": "struct Payroll.Employee storage pointer"
                        }
                      },
                      "id": 1025,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "bonus",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 142,
                      "src": "22029:14:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "22021:22:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1027,
                  "nodeType": "ExpressionStatement",
                  "src": "22021:22:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1031,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1028,
                      "name": "reimbursements",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 993,
                      "src": "22053:14:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1029,
                        "name": "employee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1003,
                        "src": "22070:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                          "typeString": "struct Payroll.Employee storage pointer"
                        }
                      },
                      "id": 1030,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "reimbursements",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 144,
                      "src": "22070:23:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "22053:40:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1032,
                  "nodeType": "ExpressionStatement",
                  "src": "22053:40:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1036,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1033,
                      "name": "lastPayroll",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 995,
                      "src": "22103:11:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1034,
                        "name": "employee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1003,
                        "src": "22117:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                          "typeString": "struct Payroll.Employee storage pointer"
                        }
                      },
                      "id": 1035,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "lastPayroll",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 146,
                      "src": "22117:20:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "22103:34:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 1037,
                  "nodeType": "ExpressionStatement",
                  "src": "22103:34:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1041,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1038,
                      "name": "endDate",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 997,
                      "src": "22147:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1039,
                        "name": "employee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1003,
                        "src": "22157:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                          "typeString": "struct Payroll.Employee storage pointer"
                        }
                      },
                      "id": 1040,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "endDate",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 148,
                      "src": "22157:16:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "22147:26:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 1042,
                  "nodeType": "ExpressionStatement",
                  "src": "22147:26:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1046,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1043,
                      "name": "allocationTokens",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1000,
                      "src": "22183:16:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                        "typeString": "address[] memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1044,
                        "name": "employee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1003,
                        "src": "22202:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                          "typeString": "struct Payroll.Employee storage pointer"
                        }
                      },
                      "id": 1045,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "allocationTokenAddresses",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 151,
                      "src": "22202:33:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_address_$dyn_storage",
                        "typeString": "address[] storage ref"
                      }
                    },
                    "src": "22183:52:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                      "typeString": "address[] memory"
                    }
                  },
                  "id": 1047,
                  "nodeType": "ExpressionStatement",
                  "src": "22183:52:0"
                }
              ]
            },
            "documentation": "@dev Return all information for employee by their ID\n@param _employeeId Employee's identifier\n@return Employee's address to receive payments\n@return Employee's salary, per second in denomination token\n@return Employee's accrued salary\n@return Employee's bonus amount\n@return Employee's reimbursements amount\n@return Employee's last payment date\n@return Employee's termination date (max uint64 if none)\n@return Employee's allowed payment tokens",
            "id": 1049,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 982,
                    "name": "_employeeId",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 979,
                    "src": "21471:11:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                ],
                "id": 983,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 981,
                  "name": "employeeIdExists",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 273,
                  "src": "21454:16:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_uint256_$",
                    "typeString": "modifier (uint256)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "21454:29:0"
              }
            ],
            "name": "getEmployee",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 980,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 979,
                  "name": "_employeeId",
                  "nodeType": "VariableDeclaration",
                  "scope": 1049,
                  "src": "21397:19:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 978,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "21397:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "21396:21:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 1001,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 985,
                  "name": "accountAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 1049,
                  "src": "21514:22:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 984,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "21514:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 987,
                  "name": "denominationSalary",
                  "nodeType": "VariableDeclaration",
                  "scope": 1049,
                  "src": "21550:26:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 986,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "21550:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 989,
                  "name": "accruedSalary",
                  "nodeType": "VariableDeclaration",
                  "scope": 1049,
                  "src": "21590:21:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 988,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "21590:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 991,
                  "name": "bonus",
                  "nodeType": "VariableDeclaration",
                  "scope": 1049,
                  "src": "21625:13:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 990,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "21625:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 993,
                  "name": "reimbursements",
                  "nodeType": "VariableDeclaration",
                  "scope": 1049,
                  "src": "21652:22:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 992,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "21652:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 995,
                  "name": "lastPayroll",
                  "nodeType": "VariableDeclaration",
                  "scope": 1049,
                  "src": "21688:18:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 994,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "21688:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 997,
                  "name": "endDate",
                  "nodeType": "VariableDeclaration",
                  "scope": 1049,
                  "src": "21720:14:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 996,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "21720:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1000,
                  "name": "allocationTokens",
                  "nodeType": "VariableDeclaration",
                  "scope": 1049,
                  "src": "21748:26:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 998,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "21748:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 999,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "21748:9:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "21500:284:0"
            },
            "scope": 1984,
            "src": "21376:866:0",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1065,
              "nodeType": "Block",
              "src": "22693:73:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 1060,
                          "name": "employees",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 170,
                          "src": "22736:9:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Employee_$156_storage_$",
                            "typeString": "mapping(uint256 => struct Payroll.Employee storage ref)"
                          }
                        },
                        "id": 1062,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 1061,
                          "name": "_employeeId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1051,
                          "src": "22746:11:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "22736:22:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Employee_$156_storage",
                          "typeString": "struct Payroll.Employee storage ref"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_Employee_$156_storage",
                          "typeString": "struct Payroll.Employee storage ref"
                        }
                      ],
                      "id": 1059,
                      "name": "_getTotalOwedCappedSalary",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1916,
                      "src": "22710:25:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_Employee_$156_storage_ptr_$returns$_t_uint256_$",
                        "typeString": "function (struct Payroll.Employee storage pointer) view returns (uint256)"
                      }
                    },
                    "id": 1063,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "22710:49:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 1058,
                  "id": 1064,
                  "nodeType": "Return",
                  "src": "22703:56:0"
                }
              ]
            },
            "documentation": "@dev Get owed salary since last payroll for an employee. It will take into account the accrued salary as well.\n     The result will be capped to max uint256 to avoid having an overflow.\n@return Employee's total owed salary: current owed payroll since the last payroll date, plus the accrued salary.",
            "id": 1066,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 1054,
                    "name": "_employeeId",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1051,
                    "src": "22662:11:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                ],
                "id": 1055,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1053,
                  "name": "employeeIdExists",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 273,
                  "src": "22645:16:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_uint256_$",
                    "typeString": "modifier (uint256)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "22645:29:0"
              }
            ],
            "name": "getTotalOwedSalary",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1052,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1051,
                  "name": "_employeeId",
                  "nodeType": "VariableDeclaration",
                  "scope": 1066,
                  "src": "22612:19:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1050,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "22612:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "22611:21:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 1058,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1057,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1066,
                  "src": "22684:7:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1056,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "22684:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "22683:9:0"
            },
            "scope": 1984,
            "src": "22584:182:0",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1085,
              "nodeType": "Block",
              "src": "23153:71:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 1078,
                          "name": "employees",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 170,
                          "src": "23170:9:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Employee_$156_storage_$",
                            "typeString": "mapping(uint256 => struct Payroll.Employee storage ref)"
                          }
                        },
                        "id": 1080,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 1079,
                          "name": "_employeeId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1068,
                          "src": "23180:11:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "23170:22:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Employee_$156_storage",
                          "typeString": "struct Payroll.Employee storage ref"
                        }
                      },
                      "id": 1081,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "allocationTokens",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 155,
                      "src": "23170:39:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                        "typeString": "mapping(address => uint256)"
                      }
                    },
                    "id": 1083,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 1082,
                      "name": "_token",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1070,
                      "src": "23210:6:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "23170:47:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 1077,
                  "id": 1084,
                  "nodeType": "Return",
                  "src": "23163:54:0"
                }
              ]
            },
            "documentation": "@dev Get an employee's payment allocation for a token\n@param _employeeId Employee's identifier\n@param _token Token to query the payment allocation for\n@return Employee's payment allocation for the token being queried",
            "id": 1086,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 1073,
                    "name": "_employeeId",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1068,
                    "src": "23122:11:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                ],
                "id": 1074,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1072,
                  "name": "employeeIdExists",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 273,
                  "src": "23105:16:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_uint256_$",
                    "typeString": "modifier (uint256)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "23105:29:0"
              }
            ],
            "name": "getAllocation",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1071,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1068,
                  "name": "_employeeId",
                  "nodeType": "VariableDeclaration",
                  "scope": 1086,
                  "src": "23056:19:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1067,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "23056:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1070,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 1086,
                  "src": "23077:14:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1069,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "23077:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "23055:37:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 1077,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1076,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1086,
                  "src": "23144:7:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1075,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "23144:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "23143:9:0"
            },
            "scope": 1984,
            "src": "23033:191:0",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1099,
              "nodeType": "Block",
              "src": "23514:45:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 1095,
                      "name": "allowedTokens",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 178,
                      "src": "23531:13:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                        "typeString": "mapping(address => bool)"
                      }
                    },
                    "id": 1097,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 1096,
                      "name": "_token",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1088,
                      "src": "23545:6:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "23531:21:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 1094,
                  "id": 1098,
                  "nodeType": "Return",
                  "src": "23524:28:0"
                }
              ]
            },
            "documentation": "@dev Check if a token is allowed to be used for payments\n@param _token Address of the token to be checked\n@return True if the given token is allowed, false otherwise",
            "id": 1100,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [
              {
                "arguments": null,
                "id": 1091,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1090,
                  "name": "isInitialized",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 10752,
                  "src": "23485:13:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "23485:13:0"
              }
            ],
            "name": "isTokenAllowed",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1089,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1088,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 1100,
                  "src": "23457:14:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1087,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "23457:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "23456:16:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 1094,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1093,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1100,
                  "src": "23508:4:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 1092,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "23508:4:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "23507:6:0"
            },
            "scope": 1984,
            "src": "23433:126:0",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1120,
              "nodeType": "Block",
              "src": "23761:123:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 1107,
                            "name": "_feed",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1102,
                            "src": "23790:5:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IFeed_$14313",
                              "typeString": "contract IFeed"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_IFeed_$14313",
                              "typeString": "contract IFeed"
                            }
                          ],
                          "id": 1106,
                          "name": "isContract",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10837,
                          "src": "23779:10:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                            "typeString": "function (address) view returns (bool)"
                          }
                        },
                        "id": 1108,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "23779:17:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1109,
                        "name": "ERROR_FEED_NOT_CONTRACT",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 115,
                        "src": "23798:23:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 1105,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        15156,
                        15157
                      ],
                      "referencedDeclaration": 15157,
                      "src": "23771:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1110,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "23771:51:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1111,
                  "nodeType": "ExpressionStatement",
                  "src": "23771:51:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1114,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1112,
                      "name": "feed",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 162,
                      "src": "23832:4:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IFeed_$14313",
                        "typeString": "contract IFeed"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 1113,
                      "name": "_feed",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1102,
                      "src": "23839:5:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IFeed_$14313",
                        "typeString": "contract IFeed"
                      }
                    },
                    "src": "23832:12:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IFeed_$14313",
                      "typeString": "contract IFeed"
                    }
                  },
                  "id": 1115,
                  "nodeType": "ExpressionStatement",
                  "src": "23832:12:0"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1117,
                        "name": "feed",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 162,
                        "src": "23872:4:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IFeed_$14313",
                          "typeString": "contract IFeed"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IFeed_$14313",
                          "typeString": "contract IFeed"
                        }
                      ],
                      "id": 1116,
                      "name": "SetPriceFeed",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 256,
                      "src": "23859:12:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 1118,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "23859:18:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1119,
                  "nodeType": "EmitStatement",
                  "src": "23854:23:0"
                }
              ]
            },
            "documentation": "@dev Set the price feed used for exchange rates\n@param _feed Address of the new price feed instance",
            "id": 1121,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "_setPriceFeed",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1103,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1102,
                  "name": "_feed",
                  "nodeType": "VariableDeclaration",
                  "scope": 1121,
                  "src": "23739:11:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IFeed_$14313",
                    "typeString": "contract IFeed"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1101,
                    "name": "IFeed",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 14313,
                    "src": "23739:5:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IFeed_$14313",
                      "typeString": "contract IFeed"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "23738:13:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 1104,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "23761:0:0"
            },
            "scope": 1984,
            "src": "23716:168:0",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1141,
              "nodeType": "Block",
              "src": "24216:218:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        },
                        "id": 1129,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 1127,
                          "name": "_time",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1123,
                          "src": "24293:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 1128,
                          "name": "MIN_RATE_EXPIRY",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 55,
                          "src": "24302:15:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "src": "24293:24:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1130,
                        "name": "ERROR_EXPIRY_TIME_TOO_SHORT",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 118,
                        "src": "24319:27:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 1126,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        15156,
                        15157
                      ],
                      "referencedDeclaration": 15157,
                      "src": "24285:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1131,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "24285:62:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1132,
                  "nodeType": "ExpressionStatement",
                  "src": "24285:62:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1135,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1133,
                      "name": "rateExpiryTime",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 164,
                      "src": "24357:14:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 1134,
                      "name": "_time",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1123,
                      "src": "24374:5:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "24357:22:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 1136,
                  "nodeType": "ExpressionStatement",
                  "src": "24357:22:0"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1138,
                        "name": "rateExpiryTime",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 164,
                        "src": "24412:14:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      ],
                      "id": 1137,
                      "name": "SetRateExpiryTime",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 260,
                      "src": "24394:17:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint64_$returns$__$",
                        "typeString": "function (uint64)"
                      }
                    },
                    "id": 1139,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "24394:33:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1140,
                  "nodeType": "EmitStatement",
                  "src": "24389:38:0"
                }
              ]
            },
            "documentation": "@dev Set the exchange rate expiry time in seconds.\n     Exchange rates older than the given value won't be accepted for payments and will cause\n     payouts to revert.\n@param _time The expiration time in seconds for exchange rates",
            "id": 1142,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "_setRateExpiryTime",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1124,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1123,
                  "name": "_time",
                  "nodeType": "VariableDeclaration",
                  "scope": 1142,
                  "src": "24193:12:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 1122,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "24193:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "24192:14:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 1125,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "24216:0:0"
            },
            "scope": 1984,
            "src": "24165:269:0",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1195,
              "nodeType": "Block",
              "src": "24886:427:0",
              "statements": [
                {
                  "assignments": [
                    1154
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1154,
                      "name": "employeeId",
                      "nodeType": "VariableDeclaration",
                      "scope": 1196,
                      "src": "24896:18:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1153,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "24896:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1157,
                  "initialValue": {
                    "argumentTypes": null,
                    "id": 1156,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "++",
                    "prefix": false,
                    "src": "24917:14:0",
                    "subExpression": {
                      "argumentTypes": null,
                      "id": 1155,
                      "name": "nextEmployee",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 166,
                      "src": "24917:12:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "24896:35:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1159,
                        "name": "employeeId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1154,
                        "src": "24962:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1160,
                        "name": "_accountAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1144,
                        "src": "24974:15:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 1158,
                      "name": "_setEmployeeAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1324,
                      "src": "24942:19:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_address_$returns$__$",
                        "typeString": "function (uint256,address)"
                      }
                    },
                    "id": 1161,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "24942:48:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1162,
                  "nodeType": "ExpressionStatement",
                  "src": "24942:48:0"
                },
                {
                  "assignments": [
                    1164
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1164,
                      "name": "employee",
                      "nodeType": "VariableDeclaration",
                      "scope": 1196,
                      "src": "25001:25:0",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                        "typeString": "struct Payroll.Employee"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 1163,
                        "name": "Employee",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 156,
                        "src": "25001:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                          "typeString": "struct Payroll.Employee"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1168,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 1165,
                      "name": "employees",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 170,
                      "src": "25029:9:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Employee_$156_storage_$",
                        "typeString": "mapping(uint256 => struct Payroll.Employee storage ref)"
                      }
                    },
                    "id": 1167,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 1166,
                      "name": "employeeId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1154,
                      "src": "25039:10:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "25029:21:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Employee_$156_storage",
                      "typeString": "struct Payroll.Employee storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "25001:49:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1173,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1169,
                        "name": "employee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1164,
                        "src": "25060:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                          "typeString": "struct Payroll.Employee storage pointer"
                        }
                      },
                      "id": 1171,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "denominationTokenSalary",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 138,
                      "src": "25060:32:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 1172,
                      "name": "_initialDenominationSalary",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1146,
                      "src": "25095:26:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "25060:61:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1174,
                  "nodeType": "ExpressionStatement",
                  "src": "25060:61:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1179,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1175,
                        "name": "employee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1164,
                        "src": "25131:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                          "typeString": "struct Payroll.Employee storage pointer"
                        }
                      },
                      "id": 1177,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "lastPayroll",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 146,
                      "src": "25131:20:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 1178,
                      "name": "_startDate",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1148,
                      "src": "25154:10:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "25131:33:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 1180,
                  "nodeType": "ExpressionStatement",
                  "src": "25131:33:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1185,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1181,
                        "name": "employee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1164,
                        "src": "25174:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                          "typeString": "struct Payroll.Employee storage pointer"
                        }
                      },
                      "id": 1183,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "endDate",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 148,
                      "src": "25174:16:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 1184,
                      "name": "MAX_UINT64",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 67,
                      "src": "25193:10:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "25174:29:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 1186,
                  "nodeType": "ExpressionStatement",
                  "src": "25174:29:0"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1188,
                        "name": "employeeId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1154,
                        "src": "25231:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1189,
                        "name": "_accountAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1144,
                        "src": "25243:15:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1190,
                        "name": "_initialDenominationSalary",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1146,
                        "src": "25260:26:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1191,
                        "name": "_startDate",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1148,
                        "src": "25288:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1192,
                        "name": "_role",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1150,
                        "src": "25300:5:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 1187,
                      "name": "AddEmployee",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 190,
                      "src": "25219:11:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_address_$_t_uint256_$_t_uint64_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (uint256,address,uint256,uint64,string memory)"
                      }
                    },
                    "id": 1193,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "25219:87:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1194,
                  "nodeType": "EmitStatement",
                  "src": "25214:92:0"
                }
              ]
            },
            "documentation": "@dev Add a new employee to Payroll\n@param _accountAddress Employee's address to receive payroll\n@param _initialDenominationSalary Employee's salary, per second in denomination token\n@param _startDate Employee's starting timestamp in seconds\n@param _role Employee's role",
            "id": 1196,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "_addEmployee",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1151,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1144,
                  "name": "_accountAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 1196,
                  "src": "24783:23:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1143,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "24783:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1146,
                  "name": "_initialDenominationSalary",
                  "nodeType": "VariableDeclaration",
                  "scope": 1196,
                  "src": "24808:34:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1145,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "24808:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1148,
                  "name": "_startDate",
                  "nodeType": "VariableDeclaration",
                  "scope": 1196,
                  "src": "24844:17:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 1147,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "24844:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1150,
                  "name": "_role",
                  "nodeType": "VariableDeclaration",
                  "scope": 1196,
                  "src": "24863:12:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 1149,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "24863:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "24782:94:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 1152,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "24886:0:0"
            },
            "scope": 1984,
            "src": "24761:552:0",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1224,
              "nodeType": "Block",
              "src": "25583:174:0",
              "statements": [
                {
                  "assignments": [
                    1204
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1204,
                      "name": "employee",
                      "nodeType": "VariableDeclaration",
                      "scope": 1225,
                      "src": "25593:25:0",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                        "typeString": "struct Payroll.Employee"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 1203,
                        "name": "Employee",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 156,
                        "src": "25593:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                          "typeString": "struct Payroll.Employee"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1208,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 1205,
                      "name": "employees",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 170,
                      "src": "25621:9:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Employee_$156_storage_$",
                        "typeString": "mapping(uint256 => struct Payroll.Employee storage ref)"
                      }
                    },
                    "id": 1207,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 1206,
                      "name": "_employeeId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1198,
                      "src": "25631:11:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "25621:22:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Employee_$156_storage",
                      "typeString": "struct Payroll.Employee storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "25593:50:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1217,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1209,
                        "name": "employee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1204,
                        "src": "25653:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                          "typeString": "struct Payroll.Employee storage pointer"
                        }
                      },
                      "id": 1211,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "bonus",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 142,
                      "src": "25653:14:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 1215,
                          "name": "_amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1200,
                          "src": "25689:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 1212,
                            "name": "employee",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1204,
                            "src": "25670:8:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                              "typeString": "struct Payroll.Employee storage pointer"
                            }
                          },
                          "id": 1213,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "bonus",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 142,
                          "src": "25670:14:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1214,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "add",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 14042,
                        "src": "25670:18:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                          "typeString": "function (uint256,uint256) pure returns (uint256)"
                        }
                      },
                      "id": 1216,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "25670:27:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "25653:44:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1218,
                  "nodeType": "ExpressionStatement",
                  "src": "25653:44:0"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1220,
                        "name": "_employeeId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1198,
                        "src": "25729:11:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1221,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1200,
                        "src": "25742:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 1219,
                      "name": "AddEmployeeBonus",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 214,
                      "src": "25712:16:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (uint256,uint256)"
                      }
                    },
                    "id": 1222,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "25712:38:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1223,
                  "nodeType": "EmitStatement",
                  "src": "25707:43:0"
                }
              ]
            },
            "documentation": "@dev Add amount to an employee's bonuses\n@param _employeeId Employee's identifier\n@param _amount Amount be added to the employee's bonuses in denomination token",
            "id": 1225,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "_addBonus",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1201,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1198,
                  "name": "_employeeId",
                  "nodeType": "VariableDeclaration",
                  "scope": 1225,
                  "src": "25536:19:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1197,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "25536:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1200,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 1225,
                  "src": "25557:15:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1199,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "25557:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "25535:38:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 1202,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "25583:0:0"
            },
            "scope": 1984,
            "src": "25517:240:0",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1253,
              "nodeType": "Block",
              "src": "26049:200:0",
              "statements": [
                {
                  "assignments": [
                    1233
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1233,
                      "name": "employee",
                      "nodeType": "VariableDeclaration",
                      "scope": 1254,
                      "src": "26059:25:0",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                        "typeString": "struct Payroll.Employee"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 1232,
                        "name": "Employee",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 156,
                        "src": "26059:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                          "typeString": "struct Payroll.Employee"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1237,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 1234,
                      "name": "employees",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 170,
                      "src": "26087:9:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Employee_$156_storage_$",
                        "typeString": "mapping(uint256 => struct Payroll.Employee storage ref)"
                      }
                    },
                    "id": 1236,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 1235,
                      "name": "_employeeId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1227,
                      "src": "26097:11:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "26087:22:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Employee_$156_storage",
                      "typeString": "struct Payroll.Employee storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "26059:50:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1246,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1238,
                        "name": "employee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1233,
                        "src": "26119:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                          "typeString": "struct Payroll.Employee storage pointer"
                        }
                      },
                      "id": 1240,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "reimbursements",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 144,
                      "src": "26119:23:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 1244,
                          "name": "_amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1229,
                          "src": "26173:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 1241,
                            "name": "employee",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1233,
                            "src": "26145:8:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                              "typeString": "struct Payroll.Employee storage pointer"
                            }
                          },
                          "id": 1242,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "reimbursements",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 144,
                          "src": "26145:23:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1243,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "add",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 14042,
                        "src": "26145:27:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                          "typeString": "function (uint256,uint256) pure returns (uint256)"
                        }
                      },
                      "id": 1245,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "26145:36:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "26119:62:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1247,
                  "nodeType": "ExpressionStatement",
                  "src": "26119:62:0"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1249,
                        "name": "_employeeId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1227,
                        "src": "26221:11:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1250,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1229,
                        "src": "26234:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 1248,
                      "name": "AddEmployeeReimbursement",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 220,
                      "src": "26196:24:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (uint256,uint256)"
                      }
                    },
                    "id": 1251,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "26196:46:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1252,
                  "nodeType": "EmitStatement",
                  "src": "26191:51:0"
                }
              ]
            },
            "documentation": "@dev Add amount to an employee's reimbursements\n@param _employeeId Employee's identifier\n@param _amount Amount be added to the employee's reimbursements in denomination token",
            "id": 1254,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "_addReimbursement",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1230,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1227,
                  "name": "_employeeId",
                  "nodeType": "VariableDeclaration",
                  "scope": 1254,
                  "src": "26002:19:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1226,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "26002:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1229,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 1254,
                  "src": "26023:15:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1228,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "26023:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "26001:38:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 1231,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "26049:0:0"
            },
            "scope": 1984,
            "src": "25975:274:0",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1282,
              "nodeType": "Block",
              "src": "26541:198:0",
              "statements": [
                {
                  "assignments": [
                    1262
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1262,
                      "name": "employee",
                      "nodeType": "VariableDeclaration",
                      "scope": 1283,
                      "src": "26551:25:0",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                        "typeString": "struct Payroll.Employee"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 1261,
                        "name": "Employee",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 156,
                        "src": "26551:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                          "typeString": "struct Payroll.Employee"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1266,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 1263,
                      "name": "employees",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 170,
                      "src": "26579:9:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Employee_$156_storage_$",
                        "typeString": "mapping(uint256 => struct Payroll.Employee storage ref)"
                      }
                    },
                    "id": 1265,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 1264,
                      "name": "_employeeId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1256,
                      "src": "26589:11:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "26579:22:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Employee_$156_storage",
                      "typeString": "struct Payroll.Employee storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "26551:50:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1275,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1267,
                        "name": "employee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1262,
                        "src": "26611:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                          "typeString": "struct Payroll.Employee storage pointer"
                        }
                      },
                      "id": 1269,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "accruedSalary",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 140,
                      "src": "26611:22:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 1273,
                          "name": "_amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1258,
                          "src": "26663:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 1270,
                            "name": "employee",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1262,
                            "src": "26636:8:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                              "typeString": "struct Payroll.Employee storage pointer"
                            }
                          },
                          "id": 1271,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "accruedSalary",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 140,
                          "src": "26636:22:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1272,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "add",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 14042,
                        "src": "26636:26:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                          "typeString": "function (uint256,uint256) pure returns (uint256)"
                        }
                      },
                      "id": 1274,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "26636:35:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "26611:60:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1276,
                  "nodeType": "ExpressionStatement",
                  "src": "26611:60:0"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1278,
                        "name": "_employeeId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1256,
                        "src": "26711:11:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1279,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1258,
                        "src": "26724:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 1277,
                      "name": "AddEmployeeAccruedSalary",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 208,
                      "src": "26686:24:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (uint256,uint256)"
                      }
                    },
                    "id": 1280,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "26686:46:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1281,
                  "nodeType": "EmitStatement",
                  "src": "26681:51:0"
                }
              ]
            },
            "documentation": "@dev Add amount to an employee's accrued salary\n@param _employeeId Employee's identifier\n@param _amount Amount be added to the employee's accrued salary in denomination token",
            "id": 1283,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "_addAccruedSalary",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1259,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1256,
                  "name": "_employeeId",
                  "nodeType": "VariableDeclaration",
                  "scope": 1283,
                  "src": "26494:19:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1255,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "26494:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1258,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 1283,
                  "src": "26515:15:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1257,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "26515:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "26493:38:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 1260,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "26541:0:0"
            },
            "scope": 1984,
            "src": "26467:272:0",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1323,
              "nodeType": "Block",
              "src": "27007:411:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 1295,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 1291,
                          "name": "_accountAddress",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1287,
                          "src": "27062:15:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 1293,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "27089:1:0",
                              "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": 1292,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "27081:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 1294,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "27081:10:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "27062:29:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1296,
                        "name": "ERROR_EMPLOYEE_NULL_ADDRESS",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 109,
                        "src": "27093:27:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 1290,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        15156,
                        15157
                      ],
                      "referencedDeclaration": 15157,
                      "src": "27054:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1297,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "27054:67:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1298,
                  "nodeType": "ExpressionStatement",
                  "src": "27054:67:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 1306,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 1300,
                            "name": "employeeIds",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 174,
                            "src": "27189:11:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 1302,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 1301,
                            "name": "_accountAddress",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1287,
                            "src": "27201:15:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "27189:28:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 1304,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "27229:1:0",
                              "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": 1303,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "27221:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint256_$",
                              "typeString": "type(uint256)"
                            },
                            "typeName": "uint256"
                          },
                          "id": 1305,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "27221:10:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "27189:42:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1307,
                        "name": "ERROR_EMPLOYEE_ALREADY_EXIST",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 112,
                        "src": "27233:28:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 1299,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        15156,
                        15157
                      ],
                      "referencedDeclaration": 15157,
                      "src": "27181:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1308,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "27181:81:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1309,
                  "nodeType": "ExpressionStatement",
                  "src": "27181:81:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1315,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 1310,
                          "name": "employees",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 170,
                          "src": "27273:9:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Employee_$156_storage_$",
                            "typeString": "mapping(uint256 => struct Payroll.Employee storage ref)"
                          }
                        },
                        "id": 1312,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 1311,
                          "name": "_employeeId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1285,
                          "src": "27283:11:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "27273:22:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Employee_$156_storage",
                          "typeString": "struct Payroll.Employee storage ref"
                        }
                      },
                      "id": 1313,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "accountAddress",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 136,
                      "src": "27273:37:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 1314,
                      "name": "_accountAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1287,
                      "src": "27313:15:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "27273:55:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 1316,
                  "nodeType": "ExpressionStatement",
                  "src": "27273:55:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1321,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 1317,
                        "name": "employeeIds",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 174,
                        "src": "27369:11:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 1319,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 1318,
                        "name": "_accountAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1287,
                        "src": "27381:15:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "27369:28:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 1320,
                      "name": "_employeeId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1285,
                      "src": "27400:11:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "27369:42:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1322,
                  "nodeType": "ExpressionStatement",
                  "src": "27369:42:0"
                }
              ]
            },
            "documentation": "@dev Set an employee's account address\n@param _employeeId Employee's identifier\n@param _accountAddress Employee's address to receive payroll",
            "id": 1324,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "_setEmployeeAddress",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1288,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1285,
                  "name": "_employeeId",
                  "nodeType": "VariableDeclaration",
                  "scope": 1324,
                  "src": "26952:19:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1284,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "26952:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1287,
                  "name": "_accountAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 1324,
                  "src": "26973:23:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1286,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "26973:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "26951:46:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 1289,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "27007:0:0"
            },
            "scope": 1984,
            "src": "26923:495:0",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1351,
              "nodeType": "Block",
              "src": "27662:231:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        },
                        "id": 1335,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 1332,
                          "name": "_endDate",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1328,
                          "src": "27722:8:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 1333,
                            "name": "getTimestamp64",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11199,
                            "src": "27734:14:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$_t_uint64_$",
                              "typeString": "function () view returns (uint64)"
                            }
                          },
                          "id": 1334,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "27734:16:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "src": "27722:28:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1336,
                        "name": "ERROR_PAST_TERMINATION_DATE",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 121,
                        "src": "27752:27:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 1331,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        15156,
                        15157
                      ],
                      "referencedDeclaration": 15157,
                      "src": "27714:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1337,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "27714:66:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1338,
                  "nodeType": "ExpressionStatement",
                  "src": "27714:66:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1344,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 1339,
                          "name": "employees",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 170,
                          "src": "27790:9:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Employee_$156_storage_$",
                            "typeString": "mapping(uint256 => struct Payroll.Employee storage ref)"
                          }
                        },
                        "id": 1341,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 1340,
                          "name": "_employeeId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1326,
                          "src": "27800:11:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "27790:22:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Employee_$156_storage",
                          "typeString": "struct Payroll.Employee storage ref"
                        }
                      },
                      "id": 1342,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "endDate",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 148,
                      "src": "27790:30:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 1343,
                      "name": "_endDate",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1328,
                      "src": "27823:8:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "27790:41:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 1345,
                  "nodeType": "ExpressionStatement",
                  "src": "27790:41:0"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1347,
                        "name": "_employeeId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1326,
                        "src": "27864:11:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1348,
                        "name": "_endDate",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1328,
                        "src": "27877:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      ],
                      "id": 1346,
                      "name": "TerminateEmployee",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 196,
                      "src": "27846:17:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_uint64_$returns$__$",
                        "typeString": "function (uint256,uint64)"
                      }
                    },
                    "id": 1349,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "27846:40:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1350,
                  "nodeType": "EmitStatement",
                  "src": "27841:45:0"
                }
              ]
            },
            "documentation": "@dev Terminate employee on end date\n@param _employeeId Employee's identifier\n@param _endDate Termination timestamp in seconds",
            "id": 1352,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "_terminateEmployee",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1329,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1326,
                  "name": "_employeeId",
                  "nodeType": "VariableDeclaration",
                  "scope": 1352,
                  "src": "27615:19:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1325,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "27615:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1328,
                  "name": "_endDate",
                  "nodeType": "VariableDeclaration",
                  "scope": 1352,
                  "src": "27636:15:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 1327,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "27636:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "27614:38:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 1330,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "27662:0:0"
            },
            "scope": 1984,
            "src": "27587:306:0",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1497,
              "nodeType": "Block",
              "src": "28605:1670:0",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1368,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 1366,
                      "name": "_totalAmount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1358,
                      "src": "28619:12:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 1367,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "28635:1:0",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "28619:17:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1372,
                  "nodeType": "IfStatement",
                  "src": "28615:60:0",
                  "trueBody": {
                    "id": 1371,
                    "nodeType": "Block",
                    "src": "28638:37:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "66616c7365",
                          "id": 1369,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "28659:5:0",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "false"
                        },
                        "functionReturnParameters": 1365,
                        "id": 1370,
                        "nodeType": "Return",
                        "src": "28652:12:0"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    1374
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1374,
                      "name": "employee",
                      "nodeType": "VariableDeclaration",
                      "scope": 1498,
                      "src": "28685:25:0",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                        "typeString": "struct Payroll.Employee"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 1373,
                        "name": "Employee",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 156,
                        "src": "28685:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                          "typeString": "struct Payroll.Employee"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1378,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 1375,
                      "name": "employees",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 170,
                      "src": "28713:9:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Employee_$156_storage_$",
                        "typeString": "mapping(uint256 => struct Payroll.Employee storage ref)"
                      }
                    },
                    "id": 1377,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 1376,
                      "name": "_employeeId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1354,
                      "src": "28723:11:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "28713:22:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Employee_$156_storage",
                      "typeString": "struct Payroll.Employee storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "28685:50:0"
                },
                {
                  "assignments": [
                    1380
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1380,
                      "name": "employeeAddress",
                      "nodeType": "VariableDeclaration",
                      "scope": 1498,
                      "src": "28745:23:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 1379,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "28745:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1383,
                  "initialValue": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 1381,
                      "name": "employee",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1374,
                      "src": "28771:8:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                        "typeString": "struct Payroll.Employee storage pointer"
                      }
                    },
                    "id": 1382,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "accountAddress",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 136,
                    "src": "28771:23:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "28745:49:0"
                },
                {
                  "assignments": [
                    1385
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1385,
                      "name": "paymentReference",
                      "nodeType": "VariableDeclaration",
                      "scope": 1498,
                      "src": "28804:30:0",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string"
                      },
                      "typeName": {
                        "id": 1384,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "28804:6:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage_ptr",
                          "typeString": "string"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1389,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1387,
                        "name": "_type",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1356,
                        "src": "28858:5:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_PaymentType_$134",
                          "typeString": "enum Payroll.PaymentType"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_enum$_PaymentType_$134",
                          "typeString": "enum Payroll.PaymentType"
                        }
                      ],
                      "id": 1386,
                      "name": "_paymentReferenceFor",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1952,
                      "src": "28837:20:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_enum$_PaymentType_$134_$returns$_t_string_memory_ptr_$",
                        "typeString": "function (enum Payroll.PaymentType) pure returns (string memory)"
                      }
                    },
                    "id": 1388,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "28837:27:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_memory_ptr",
                      "typeString": "string memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "28804:60:0"
                },
                {
                  "assignments": [
                    1393
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1393,
                      "name": "allocationTokenAddresses",
                      "nodeType": "VariableDeclaration",
                      "scope": 1498,
                      "src": "28875:42:0",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                        "typeString": "address[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 1391,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "28875:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 1392,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "28875:9:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                          "typeString": "address[]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1396,
                  "initialValue": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 1394,
                      "name": "employee",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1374,
                      "src": "28920:8:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                        "typeString": "struct Payroll.Employee storage pointer"
                      }
                    },
                    "id": 1395,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "allocationTokenAddresses",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 151,
                    "src": "28920:33:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage",
                      "typeString": "address[] storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "28875:78:0"
                },
                {
                  "body": {
                    "id": 1495,
                    "nodeType": "Block",
                    "src": "29025:1244:0",
                    "statements": [
                      {
                        "assignments": [
                          1409
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1409,
                            "name": "token",
                            "nodeType": "VariableDeclaration",
                            "scope": 1498,
                            "src": "29039:13:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "typeName": {
                              "id": 1408,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "29039:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 1413,
                        "initialValue": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 1410,
                            "name": "allocationTokenAddresses",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1393,
                            "src": "29055:24:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                              "typeString": "address[] storage pointer"
                            }
                          },
                          "id": 1412,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 1411,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1398,
                            "src": "29080:1:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "29055:27:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "29039:43:0"
                      },
                      {
                        "assignments": [
                          1415
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1415,
                            "name": "tokenAllocation",
                            "nodeType": "VariableDeclaration",
                            "scope": 1498,
                            "src": "29096:23:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 1414,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "29096:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 1420,
                        "initialValue": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 1416,
                              "name": "employee",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1374,
                              "src": "29122:8:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                                "typeString": "struct Payroll.Employee storage pointer"
                              }
                            },
                            "id": 1417,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "allocationTokens",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 155,
                            "src": "29122:25:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 1419,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 1418,
                            "name": "token",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1409,
                            "src": "29148:5:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "29122:32:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "29096:58:0"
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1425,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 1421,
                            "name": "tokenAllocation",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1415,
                            "src": "29172:15:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 1423,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "29199:1:0",
                                "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": 1422,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "29191:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_uint256_$",
                                "typeString": "type(uint256)"
                              },
                              "typeName": "uint256"
                            },
                            "id": 1424,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "29191:10:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "29172:29:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 1494,
                        "nodeType": "IfStatement",
                        "src": "29168:1091:0",
                        "trueBody": {
                          "id": 1493,
                          "nodeType": "Block",
                          "src": "29203:1056:0",
                          "statements": [
                            {
                              "assignments": [
                                1427
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 1427,
                                  "name": "exchangeRate",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 1498,
                                  "src": "29368:20:0",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "typeName": {
                                    "id": 1426,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "29368:7:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                }
                              ],
                              "id": 1431,
                              "initialValue": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 1429,
                                    "name": "token",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1409,
                                    "src": "29427:5:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "id": 1428,
                                  "name": "_getExchangeRateInDenominationToken",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1796,
                                  "src": "29391:35:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
                                    "typeString": "function (address) view returns (uint256)"
                                  }
                                },
                                "id": 1430,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "29391:42:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "29368:65:0"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "condition": {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 1436,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "argumentTypes": null,
                                        "expression": {
                                          "argumentTypes": null,
                                          "id": 1433,
                                          "name": "_minRates",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1361,
                                          "src": "29459:9:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                            "typeString": "uint256[] memory"
                                          }
                                        },
                                        "id": 1434,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "length",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": null,
                                        "src": "29459:16:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": ">",
                                      "rightExpression": {
                                        "argumentTypes": null,
                                        "hexValue": "30",
                                        "id": 1435,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "29478:1:0",
                                        "subdenomination": null,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_0_by_1",
                                          "typeString": "int_const 0"
                                        },
                                        "value": "0"
                                      },
                                      "src": "29459:20:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "falseExpression": {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 1444,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "argumentTypes": null,
                                        "id": 1442,
                                        "name": "exchangeRate",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1427,
                                        "src": "29513:12:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": ">",
                                      "rightExpression": {
                                        "argumentTypes": null,
                                        "hexValue": "30",
                                        "id": 1443,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "29528:1:0",
                                        "subdenomination": null,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_0_by_1",
                                          "typeString": "int_const 0"
                                        },
                                        "value": "0"
                                      },
                                      "src": "29513:16:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "id": 1445,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "Conditional",
                                    "src": "29459:70:0",
                                    "trueExpression": {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 1441,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "argumentTypes": null,
                                        "id": 1437,
                                        "name": "exchangeRate",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1427,
                                        "src": "29482:12:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": ">=",
                                      "rightExpression": {
                                        "argumentTypes": null,
                                        "baseExpression": {
                                          "argumentTypes": null,
                                          "id": 1438,
                                          "name": "_minRates",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1361,
                                          "src": "29498:9:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                            "typeString": "uint256[] memory"
                                          }
                                        },
                                        "id": 1440,
                                        "indexExpression": {
                                          "argumentTypes": null,
                                          "id": 1439,
                                          "name": "i",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1398,
                                          "src": "29508:1:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "29498:12:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "29482:28:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 1446,
                                    "name": "ERROR_EXCHANGE_RATE_TOO_LOW",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 124,
                                    "src": "29531:27:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_string_memory",
                                      "typeString": "string memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    },
                                    {
                                      "typeIdentifier": "t_string_memory",
                                      "typeString": "string memory"
                                    }
                                  ],
                                  "id": 1432,
                                  "name": "require",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [
                                    15156,
                                    15157
                                  ],
                                  "referencedDeclaration": 15157,
                                  "src": "29451:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                    "typeString": "function (bool,string memory) pure"
                                  }
                                },
                                "id": 1447,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "29451:108:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 1448,
                              "nodeType": "ExpressionStatement",
                              "src": "29451:108:0"
                            },
                            {
                              "assignments": [
                                1450
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 1450,
                                  "name": "tokenAmount",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 1498,
                                  "src": "29674:19:0",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "typeName": {
                                    "id": 1449,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "29674:7:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                }
                              ],
                              "id": 1458,
                              "initialValue": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 1456,
                                    "name": "tokenAllocation",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1415,
                                    "src": "29731:15:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "id": 1453,
                                        "name": "exchangeRate",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1427,
                                        "src": "29713:12:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 1451,
                                        "name": "_totalAmount",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1358,
                                        "src": "29696:12:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "id": 1452,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "mul",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 13967,
                                      "src": "29696:16:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                                      }
                                    },
                                    "id": 1454,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "29696:30:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 1455,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "mul",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 13967,
                                  "src": "29696:34:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                    "typeString": "function (uint256,uint256) pure returns (uint256)"
                                  }
                                },
                                "id": 1457,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "29696:51:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "29674:73:0"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 1469,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 1459,
                                  "name": "tokenAmount",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1450,
                                  "src": "29863:11:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "arguments": [],
                                      "expression": {
                                        "argumentTypes": [],
                                        "expression": {
                                          "argumentTypes": null,
                                          "id": 1465,
                                          "name": "feed",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 162,
                                          "src": "29902:4:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_contract$_IFeed_$14313",
                                            "typeString": "contract IFeed"
                                          }
                                        },
                                        "id": 1466,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "ratePrecision",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 14301,
                                        "src": "29902:18:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_external_pure$__$returns$_t_uint256_$",
                                          "typeString": "function () pure external returns (uint256)"
                                        }
                                      },
                                      "id": 1467,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "29902:20:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": null,
                                      "arguments": [
                                        {
                                          "argumentTypes": null,
                                          "hexValue": "313030",
                                          "id": 1462,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "kind": "number",
                                          "lValueRequested": false,
                                          "nodeType": "Literal",
                                          "src": "29893:3:0",
                                          "subdenomination": null,
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_rational_100_by_1",
                                            "typeString": "int_const 100"
                                          },
                                          "value": "100"
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_rational_100_by_1",
                                            "typeString": "int_const 100"
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": null,
                                          "id": 1460,
                                          "name": "tokenAmount",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1450,
                                          "src": "29877:11:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "id": 1461,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "div",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 13992,
                                        "src": "29877:15:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                          "typeString": "function (uint256,uint256) pure returns (uint256)"
                                        }
                                      },
                                      "id": 1463,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "29877:20:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 1464,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "div",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 13992,
                                    "src": "29877:24:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                      "typeString": "function (uint256,uint256) pure returns (uint256)"
                                    }
                                  },
                                  "id": 1468,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "29877:46:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "29863:60:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 1470,
                              "nodeType": "ExpressionStatement",
                              "src": "29863:60:0"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 1474,
                                    "name": "token",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1409,
                                    "src": "30036:5:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 1475,
                                    "name": "employeeAddress",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1380,
                                    "src": "30043:15:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 1476,
                                    "name": "tokenAmount",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1450,
                                    "src": "30060:11:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 1477,
                                    "name": "paymentReference",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1385,
                                    "src": "30073:16:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 1471,
                                    "name": "finance",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 158,
                                    "src": "30008:7:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_Finance_$5528",
                                      "typeString": "contract Finance"
                                    }
                                  },
                                  "id": 1473,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "newImmediatePayment",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 4002,
                                  "src": "30008:27:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_string_memory_ptr_$returns$__$",
                                    "typeString": "function (address,address,uint256,string memory) external"
                                  }
                                },
                                "id": 1478,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "30008:82:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 1479,
                              "nodeType": "ExpressionStatement",
                              "src": "30008:82:0"
                            },
                            {
                              "eventCall": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 1481,
                                    "name": "_employeeId",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1354,
                                    "src": "30125:11:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 1482,
                                    "name": "employeeAddress",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1380,
                                    "src": "30138:15:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 1483,
                                    "name": "token",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1409,
                                    "src": "30155:5:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 1484,
                                    "name": "tokenAmount",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1450,
                                    "src": "30162:11:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 1485,
                                    "name": "exchangeRate",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1427,
                                    "src": "30175:12:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 1486,
                                    "name": "paymentReference",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1385,
                                    "src": "30189:16:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  ],
                                  "id": 1480,
                                  "name": "SendPayment",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 246,
                                  "src": "30113:11:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_string_memory_ptr_$returns$__$",
                                    "typeString": "function (uint256,address,address,uint256,uint256,string memory)"
                                  }
                                },
                                "id": 1487,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "30113:93:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 1488,
                              "nodeType": "EmitStatement",
                              "src": "30108:98:0"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 1491,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 1489,
                                  "name": "somethingPaid",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1364,
                                  "src": "30224:13:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "hexValue": "74727565",
                                  "id": 1490,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "bool",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "30240:4:0",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  },
                                  "value": "true"
                                },
                                "src": "30224:20:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 1492,
                              "nodeType": "ExpressionStatement",
                              "src": "30224:20:0"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1404,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 1401,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1398,
                      "src": "28983:1:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1402,
                        "name": "allocationTokenAddresses",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1393,
                        "src": "28987:24:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                          "typeString": "address[] storage pointer"
                        }
                      },
                      "id": 1403,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "28987:31:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "28983:35:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 1496,
                  "initializationExpression": {
                    "assignments": [
                      1398
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 1398,
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "scope": 1498,
                        "src": "28968:9:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1397,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "28968:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 1400,
                    "initialValue": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 1399,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "28980:1:0",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "28968:13:0"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 1406,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "29020:3:0",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 1405,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1398,
                        "src": "29020:1:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 1407,
                    "nodeType": "ExpressionStatement",
                    "src": "29020:3:0"
                  },
                  "nodeType": "ForStatement",
                  "src": "28963:1306:0"
                }
              ]
            },
            "documentation": "@dev Loop over allowed tokens to send requested amount to the employee in their desired allocation\n@param _employeeId Employee's identifier\n@param _totalAmount Total amount to be transferred to the employee distributed in accordance to the employee's token allocation.\n@param _type Payment type being transferred (Payroll, Reimbursement or Bonus)\n@param _minRates Array of employee's minimum acceptable rates for their allowed payment tokens\n@return True if there was at least one token transfer",
            "id": 1498,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "_transferTokensAmount",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1362,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1354,
                  "name": "_employeeId",
                  "nodeType": "VariableDeclaration",
                  "scope": 1498,
                  "src": "28484:19:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1353,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "28484:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1356,
                  "name": "_type",
                  "nodeType": "VariableDeclaration",
                  "scope": 1498,
                  "src": "28505:17:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_PaymentType_$134",
                    "typeString": "enum Payroll.PaymentType"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1355,
                    "name": "PaymentType",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 134,
                    "src": "28505:11:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_PaymentType_$134",
                      "typeString": "enum Payroll.PaymentType"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1358,
                  "name": "_totalAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 1498,
                  "src": "28524:20:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1357,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "28524:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1361,
                  "name": "_minRates",
                  "nodeType": "VariableDeclaration",
                  "scope": 1498,
                  "src": "28546:19:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 1359,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "28546:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 1360,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "28546:9:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "28483:83:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 1365,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1364,
                  "name": "somethingPaid",
                  "nodeType": "VariableDeclaration",
                  "scope": 1498,
                  "src": "28585:18:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 1363,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "28585:4:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "28584:20:0"
            },
            "scope": 1984,
            "src": "28453:1822:0",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1543,
              "nodeType": "Block",
              "src": "30518:356:0",
              "statements": [
                {
                  "assignments": [
                    1504
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1504,
                      "name": "employee",
                      "nodeType": "VariableDeclaration",
                      "scope": 1544,
                      "src": "30528:25:0",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                        "typeString": "struct Payroll.Employee"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 1503,
                        "name": "Employee",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 156,
                        "src": "30528:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                          "typeString": "struct Payroll.Employee"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1508,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 1505,
                      "name": "employees",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 170,
                      "src": "30556:9:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Employee_$156_storage_$",
                        "typeString": "mapping(uint256 => struct Payroll.Employee storage ref)"
                      }
                    },
                    "id": 1507,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 1506,
                      "name": "_employeeId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1500,
                      "src": "30566:11:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "30556:22:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Employee_$156_storage",
                      "typeString": "struct Payroll.Employee storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "30528:50:0"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 1529,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      },
                      "id": 1513,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 1509,
                          "name": "employee",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1504,
                          "src": "30606:8:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                            "typeString": "struct Payroll.Employee storage pointer"
                          }
                        },
                        "id": 1510,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "lastPayroll",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 146,
                        "src": "30606:20:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 1511,
                          "name": "employee",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1504,
                          "src": "30630:8:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                            "typeString": "struct Payroll.Employee storage pointer"
                          }
                        },
                        "id": 1512,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "endDate",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 148,
                        "src": "30630:16:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "src": "30606:40:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 1527,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "id": 1522,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 1517,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 1514,
                                  "name": "employee",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1504,
                                  "src": "30663:8:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                                    "typeString": "struct Payroll.Employee storage pointer"
                                  }
                                },
                                "id": 1515,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "accruedSalary",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 140,
                                "src": "30663:22:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 1516,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "30689:1:0",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "30663:27:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "&&",
                            "rightExpression": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 1521,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 1518,
                                  "name": "employee",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1504,
                                  "src": "30694:8:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                                    "typeString": "struct Payroll.Employee storage pointer"
                                  }
                                },
                                "id": 1519,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "bonus",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 142,
                                "src": "30694:14:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 1520,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "30712:1:0",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "30694:19:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "src": "30663:50:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "&&",
                          "rightExpression": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 1526,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 1523,
                                "name": "employee",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1504,
                                "src": "30717:8:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                                  "typeString": "struct Payroll.Employee storage pointer"
                                }
                              },
                              "id": 1524,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "reimbursements",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 144,
                              "src": "30717:23:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "==",
                            "rightExpression": {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 1525,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "30744:1:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            "src": "30717:28:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "30663:82:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        }
                      ],
                      "id": 1528,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "30662:84:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "30606:140:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1542,
                  "nodeType": "IfStatement",
                  "src": "30589:279:0",
                  "trueBody": {
                    "id": 1541,
                    "nodeType": "Block",
                    "src": "30757:111:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1534,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "delete",
                          "prefix": true,
                          "src": "30771:43:0",
                          "subExpression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 1530,
                              "name": "employeeIds",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 174,
                              "src": "30778:11:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 1533,
                            "indexExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 1531,
                                "name": "employee",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1504,
                                "src": "30790:8:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                                  "typeString": "struct Payroll.Employee storage pointer"
                                }
                              },
                              "id": 1532,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "accountAddress",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 136,
                              "src": "30790:23:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "30778:36:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1535,
                        "nodeType": "ExpressionStatement",
                        "src": "30771:43:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1539,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "delete",
                          "prefix": true,
                          "src": "30828:29:0",
                          "subExpression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 1536,
                              "name": "employees",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 170,
                              "src": "30835:9:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Employee_$156_storage_$",
                                "typeString": "mapping(uint256 => struct Payroll.Employee storage ref)"
                              }
                            },
                            "id": 1538,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 1537,
                              "name": "_employeeId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1500,
                              "src": "30845:11:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "30835:22:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Employee_$156_storage",
                              "typeString": "struct Payroll.Employee storage ref"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1540,
                        "nodeType": "ExpressionStatement",
                        "src": "30828:29:0"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": "@dev Remove employee if there are no owed funds and employee's end date has been reached\n@param _employeeId Employee's identifier",
            "id": 1544,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "_removeEmployeeIfTerminatedAndPaidOut",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1501,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1500,
                  "name": "_employeeId",
                  "nodeType": "VariableDeclaration",
                  "scope": 1544,
                  "src": "30488:19:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1499,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "30488:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "30487:21:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 1502,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "30518:0:0"
            },
            "scope": 1984,
            "src": "30441:433:0",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1657,
              "nodeType": "Block",
              "src": "31288:2173:0",
              "statements": [
                {
                  "assignments": [
                    1552
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1552,
                      "name": "accruedSalary",
                      "nodeType": "VariableDeclaration",
                      "scope": 1658,
                      "src": "31298:21:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1551,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "31298:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1555,
                  "initialValue": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 1553,
                      "name": "_employee",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1546,
                      "src": "31322:9:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                        "typeString": "struct Payroll.Employee storage pointer"
                      }
                    },
                    "id": 1554,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "accruedSalary",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 140,
                    "src": "31322:23:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "31298:47:0"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1558,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 1556,
                      "name": "_paymentAmount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1548,
                      "src": "31360:14:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 1557,
                      "name": "accruedSalary",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1552,
                      "src": "31378:13:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "31360:31:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1569,
                  "nodeType": "IfStatement",
                  "src": "31356:366:0",
                  "trueBody": {
                    "id": 1568,
                    "nodeType": "Block",
                    "src": "31393:329:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1565,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 1559,
                              "name": "_employee",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1546,
                              "src": "31635:9:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                                "typeString": "struct Payroll.Employee storage pointer"
                              }
                            },
                            "id": 1561,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "accruedSalary",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 140,
                            "src": "31635:23:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 1564,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "id": 1562,
                              "name": "accruedSalary",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1552,
                              "src": "31661:13:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "-",
                            "rightExpression": {
                              "argumentTypes": null,
                              "id": 1563,
                              "name": "_paymentAmount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1548,
                              "src": "31677:14:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "31661:30:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "31635:56:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1566,
                        "nodeType": "ExpressionStatement",
                        "src": "31635:56:0"
                      },
                      {
                        "expression": null,
                        "functionReturnParameters": 1550,
                        "id": 1567,
                        "nodeType": "Return",
                        "src": "31705:7:0"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    1571
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1571,
                      "name": "currentSalaryPaid",
                      "nodeType": "VariableDeclaration",
                      "scope": 1658,
                      "src": "31897:25:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1570,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "31897:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1573,
                  "initialValue": {
                    "argumentTypes": null,
                    "id": 1572,
                    "name": "_paymentAmount",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1548,
                    "src": "31925:14:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "31897:42:0"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1576,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 1574,
                      "name": "accruedSalary",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1552,
                      "src": "31953:13:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 1575,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "31969:1:0",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "31953:17:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1590,
                  "nodeType": "IfStatement",
                  "src": "31949:441:0",
                  "trueBody": {
                    "id": 1589,
                    "nodeType": "Block",
                    "src": "31972:418:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1581,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 1577,
                            "name": "currentSalaryPaid",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1571,
                            "src": "32227:17:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 1580,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "id": 1578,
                              "name": "_paymentAmount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1548,
                              "src": "32247:14:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "-",
                            "rightExpression": {
                              "argumentTypes": null,
                              "id": 1579,
                              "name": "accruedSalary",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1552,
                              "src": "32264:13:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "32247:30:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "32227:50:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1582,
                        "nodeType": "ExpressionStatement",
                        "src": "32227:50:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1587,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 1583,
                              "name": "_employee",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1546,
                              "src": "32352:9:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                                "typeString": "struct Payroll.Employee storage pointer"
                              }
                            },
                            "id": 1585,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "accruedSalary",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 140,
                            "src": "32352:23:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 1586,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "32378:1:0",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "32352:27:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1588,
                        "nodeType": "ExpressionStatement",
                        "src": "32352:27:0"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    1592
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1592,
                      "name": "salary",
                      "nodeType": "VariableDeclaration",
                      "scope": 1658,
                      "src": "32400:14:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1591,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "32400:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1595,
                  "initialValue": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 1593,
                      "name": "_employee",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1546,
                      "src": "32417:9:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                        "typeString": "struct Payroll.Employee storage pointer"
                      }
                    },
                    "id": 1594,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "denominationTokenSalary",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 138,
                    "src": "32417:33:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "32400:50:0"
                },
                {
                  "assignments": [
                    1597
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1597,
                      "name": "timeDiff",
                      "nodeType": "VariableDeclaration",
                      "scope": 1658,
                      "src": "32460:16:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1596,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "32460:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1602,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1600,
                        "name": "salary",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1592,
                        "src": "32501:6:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 1598,
                        "name": "currentSalaryPaid",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1571,
                        "src": "32479:17:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 1599,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "div",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 13992,
                      "src": "32479:21:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 1601,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "32479:29:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "32460:48:0"
                },
                {
                  "assignments": [
                    1604
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1604,
                      "name": "extraSalary",
                      "nodeType": "VariableDeclaration",
                      "scope": 1658,
                      "src": "32748:19:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1603,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "32748:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1608,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1607,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 1605,
                      "name": "currentSalaryPaid",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1571,
                      "src": "32770:17:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "%",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 1606,
                      "name": "salary",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1592,
                      "src": "32790:6:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "32770:26:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "32748:48:0"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1611,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 1609,
                      "name": "extraSalary",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1604,
                      "src": "32810:11:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 1610,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "32824:1:0",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "32810:15:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1628,
                  "nodeType": "IfStatement",
                  "src": "32806:132:0",
                  "trueBody": {
                    "id": 1627,
                    "nodeType": "Block",
                    "src": "32827:111:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1617,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 1612,
                            "name": "timeDiff",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1597,
                            "src": "32841:8:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "31",
                                "id": 1615,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "32865:1:0",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_1_by_1",
                                  "typeString": "int_const 1"
                                },
                                "value": "1"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_1_by_1",
                                  "typeString": "int_const 1"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 1613,
                                "name": "timeDiff",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1597,
                                "src": "32852:8:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 1614,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "add",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 14042,
                              "src": "32852:12:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 1616,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "32852:15:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "32841:26:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1618,
                        "nodeType": "ExpressionStatement",
                        "src": "32841:26:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1625,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 1619,
                              "name": "_employee",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1546,
                              "src": "32881:9:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                                "typeString": "struct Payroll.Employee storage pointer"
                              }
                            },
                            "id": 1621,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "accruedSalary",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 140,
                            "src": "32881:23:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 1624,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "id": 1622,
                              "name": "salary",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1592,
                              "src": "32907:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "-",
                            "rightExpression": {
                              "argumentTypes": null,
                              "id": 1623,
                              "name": "extraSalary",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1604,
                              "src": "32916:11:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "32907:20:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "32881:46:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1626,
                        "nodeType": "ExpressionStatement",
                        "src": "32881:46:0"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    1630
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1630,
                      "name": "lastPayrollDate",
                      "nodeType": "VariableDeclaration",
                      "scope": 1658,
                      "src": "32948:23:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1629,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "32948:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1638,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1636,
                        "name": "timeDiff",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1597,
                        "src": "33009:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 1632,
                              "name": "_employee",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1546,
                              "src": "32982:9:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                                "typeString": "struct Payroll.Employee storage pointer"
                              }
                            },
                            "id": 1633,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "lastPayroll",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 146,
                            "src": "32982:21:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          ],
                          "id": 1631,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "32974:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          },
                          "typeName": "uint256"
                        },
                        "id": 1634,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "32974:30:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 1635,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "add",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 14042,
                      "src": "32974:34:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 1637,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "32974:44:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "32948:70:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 1645,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 1640,
                          "name": "lastPayrollDate",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1630,
                          "src": "33249:15:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "id": 1642,
                                "name": "getTimestamp64",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 11199,
                                "src": "33276:14:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$__$returns$_t_uint64_$",
                                  "typeString": "function () view returns (uint64)"
                                }
                              },
                              "id": 1643,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "33276:16:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint64",
                                "typeString": "uint64"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint64",
                                "typeString": "uint64"
                              }
                            ],
                            "id": 1641,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "33268:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint256_$",
                              "typeString": "type(uint256)"
                            },
                            "typeName": "uint256"
                          },
                          "id": 1644,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "33268:25:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "33249:44:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1646,
                        "name": "ERROR_LAST_PAYROLL_DATE_TOO_BIG",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 127,
                        "src": "33295:31:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 1639,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        15156,
                        15157
                      ],
                      "referencedDeclaration": 15157,
                      "src": "33241:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1647,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "33241:86:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1648,
                  "nodeType": "ExpressionStatement",
                  "src": "33241:86:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1655,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1649,
                        "name": "_employee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1546,
                        "src": "33407:9:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                          "typeString": "struct Payroll.Employee storage pointer"
                        }
                      },
                      "id": 1651,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "lastPayroll",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 146,
                      "src": "33407:21:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 1653,
                          "name": "lastPayrollDate",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1630,
                          "src": "33438:15:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 1652,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "33431:6:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_uint64_$",
                          "typeString": "type(uint64)"
                        },
                        "typeName": "uint64"
                      },
                      "id": 1654,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "33431:23:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "33407:47:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 1656,
                  "nodeType": "ExpressionStatement",
                  "src": "33407:47:0"
                }
              ]
            },
            "documentation": "@dev Updates the accrued salary and payroll date of an employee based on a payment amount and\n     their currently owed salary since last payroll date\n@param _employee Employee struct in storage\n@param _paymentAmount Amount being paid to the employee",
            "id": 1658,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "_updateEmployeeAccountingBasedOnPaidSalary",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1549,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1546,
                  "name": "_employee",
                  "nodeType": "VariableDeclaration",
                  "scope": 1658,
                  "src": "31227:26:0",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                    "typeString": "struct Payroll.Employee"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1545,
                    "name": "Employee",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 156,
                    "src": "31227:8:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                      "typeString": "struct Payroll.Employee"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1548,
                  "name": "_paymentAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 1658,
                  "src": "31255:22:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1547,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "31255:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "31226:52:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 1550,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "31288:0:0"
            },
            "scope": 1984,
            "src": "31175:2286:0",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1674,
              "nodeType": "Block",
              "src": "33776:75:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 1672,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 1665,
                          "name": "employees",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 170,
                          "src": "33793:9:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Employee_$156_storage_$",
                            "typeString": "mapping(uint256 => struct Payroll.Employee storage ref)"
                          }
                        },
                        "id": 1667,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 1666,
                          "name": "_employeeId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1660,
                          "src": "33803:11:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "33793:22:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Employee_$156_storage",
                          "typeString": "struct Payroll.Employee storage ref"
                        }
                      },
                      "id": 1668,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "accountAddress",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 136,
                      "src": "33793:37:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 1670,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "33842:1:0",
                          "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": 1669,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "33834:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 1671,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "33834:10:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "33793:51:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 1664,
                  "id": 1673,
                  "nodeType": "Return",
                  "src": "33786:58:0"
                }
              ]
            },
            "documentation": "@dev Tell whether an employee is registered in this Payroll or not\n@param _employeeId Employee's identifier\n@return True if the given employee ID belongs to an registered employee, false otherwise",
            "id": 1675,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "_employeeExists",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1661,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1660,
                  "name": "_employeeId",
                  "nodeType": "VariableDeclaration",
                  "scope": 1675,
                  "src": "33726:19:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1659,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "33726:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "33725:21:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 1664,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1663,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1675,
                  "src": "33770:4:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 1662,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "33770:4:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "33769:6:0"
            },
            "scope": 1984,
            "src": "33701:150:0",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1734,
              "nodeType": "Block",
              "src": "34236:447:0",
              "statements": [
                {
                  "assignments": [
                    1681
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1681,
                      "name": "sum",
                      "nodeType": "VariableDeclaration",
                      "scope": 1735,
                      "src": "34246:11:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1680,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "34246:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1683,
                  "initialValue": {
                    "argumentTypes": null,
                    "hexValue": "30",
                    "id": 1682,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "34260:1:0",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_0_by_1",
                      "typeString": "int_const 0"
                    },
                    "value": "0"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "34246:15:0"
                },
                {
                  "assignments": [
                    1687
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1687,
                      "name": "allocationTokenAddresses",
                      "nodeType": "VariableDeclaration",
                      "scope": 1735,
                      "src": "34271:41:0",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                        "typeString": "address[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 1685,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "34271:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 1686,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "34271:9:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                          "typeString": "address[]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1690,
                  "initialValue": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 1688,
                      "name": "_employee",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1677,
                      "src": "34315:9:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                        "typeString": "struct Payroll.Employee storage pointer"
                      }
                    },
                    "id": 1689,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "allocationTokenAddresses",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 151,
                    "src": "34315:34:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage",
                      "typeString": "address[] storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "34271:78:0"
                },
                {
                  "body": {
                    "id": 1725,
                    "nodeType": "Block",
                    "src": "34421:198:0",
                    "statements": [
                      {
                        "assignments": [
                          1703
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1703,
                            "name": "token",
                            "nodeType": "VariableDeclaration",
                            "scope": 1735,
                            "src": "34435:13:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "typeName": {
                              "id": 1702,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "34435:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 1707,
                        "initialValue": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 1704,
                            "name": "allocationTokenAddresses",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1687,
                            "src": "34451:24:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                              "typeString": "address[] memory"
                            }
                          },
                          "id": 1706,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 1705,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1692,
                            "src": "34476:1:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "34451:27:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "34435:43:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 1709,
                                "name": "allowedTokens",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 178,
                                "src": "34500:13:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                                  "typeString": "mapping(address => bool)"
                                }
                              },
                              "id": 1711,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 1710,
                                "name": "token",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1703,
                                "src": "34514:5:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "34500:20:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 1712,
                              "name": "ERROR_NOT_ALLOWED_TOKEN",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 94,
                              "src": "34522:23:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory",
                                "typeString": "string memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_string_memory",
                                "typeString": "string memory"
                              }
                            ],
                            "id": 1708,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              15156,
                              15157
                            ],
                            "referencedDeclaration": 15157,
                            "src": "34492:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 1713,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "34492:54:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1714,
                        "nodeType": "ExpressionStatement",
                        "src": "34492:54:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1723,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 1715,
                            "name": "sum",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1681,
                            "src": "34560:3:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 1718,
                                    "name": "_employee",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1677,
                                    "src": "34574:9:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                                      "typeString": "struct Payroll.Employee storage pointer"
                                    }
                                  },
                                  "id": 1719,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "allocationTokens",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 155,
                                  "src": "34574:26:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                    "typeString": "mapping(address => uint256)"
                                  }
                                },
                                "id": 1721,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "id": 1720,
                                  "name": "token",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1703,
                                  "src": "34601:5:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "34574:33:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 1716,
                                "name": "sum",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1681,
                                "src": "34566:3:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 1717,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "add",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 14042,
                              "src": "34566:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 1722,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "34566:42:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "34560:48:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1724,
                        "nodeType": "ExpressionStatement",
                        "src": "34560:48:0"
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1698,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 1695,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1692,
                      "src": "34379:1:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1696,
                        "name": "allocationTokenAddresses",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1687,
                        "src": "34383:24:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        }
                      },
                      "id": 1697,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "34383:31:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "34379:35:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 1726,
                  "initializationExpression": {
                    "assignments": [
                      1692
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 1692,
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "scope": 1735,
                        "src": "34364:9:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1691,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "34364:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 1694,
                    "initialValue": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 1693,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "34376:1:0",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "34364:13:0"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 1700,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "34416:3:0",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 1699,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1692,
                        "src": "34416:1:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 1701,
                    "nodeType": "ExpressionStatement",
                    "src": "34416:3:0"
                  },
                  "nodeType": "ForStatement",
                  "src": "34359:260:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 1730,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 1728,
                          "name": "sum",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1681,
                          "src": "34636:3:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "313030",
                          "id": 1729,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "34643:3:0",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_100_by_1",
                            "typeString": "int_const 100"
                          },
                          "value": "100"
                        },
                        "src": "34636:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1731,
                        "name": "ERROR_DISTRIBUTION_NOT_FULL",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 97,
                        "src": "34648:27:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 1727,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        15156,
                        15157
                      ],
                      "referencedDeclaration": 15157,
                      "src": "34628:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1732,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "34628:48:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1733,
                  "nodeType": "ExpressionStatement",
                  "src": "34628:48:0"
                }
              ]
            },
            "documentation": "@dev Tell whether an employee has a valid token allocation or not.\n     A valid allocation is one that sums to 100 and only includes allowed tokens.\n@param _employee Employee struct in storage\n@return Reverts if employee's allocation is invalid",
            "id": 1735,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "_ensureEmployeeTokenAllocationsIsValid",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1678,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1677,
                  "name": "_employee",
                  "nodeType": "VariableDeclaration",
                  "scope": 1735,
                  "src": "34194:26:0",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                    "typeString": "struct Payroll.Employee"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1676,
                    "name": "Employee",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 156,
                    "src": "34194:8:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                      "typeString": "struct Payroll.Employee"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "34193:28:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 1679,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "34236:0:0"
            },
            "scope": 1984,
            "src": "34146:537:0",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1748,
              "nodeType": "Block",
              "src": "35010:61:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    },
                    "id": 1746,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1742,
                        "name": "_employee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1737,
                        "src": "35027:9:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                          "typeString": "struct Payroll.Employee storage pointer"
                        }
                      },
                      "id": 1743,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "endDate",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 148,
                      "src": "35027:17:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 1744,
                        "name": "getTimestamp64",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11199,
                        "src": "35048:14:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$__$returns$_t_uint64_$",
                          "typeString": "function () view returns (uint64)"
                        }
                      },
                      "id": 1745,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "35048:16:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "35027:37:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 1741,
                  "id": 1747,
                  "nodeType": "Return",
                  "src": "35020:44:0"
                }
              ]
            },
            "documentation": "@dev Tell whether an employee is still active or not\n@param _employee Employee struct in storage\n@return True if the employee exists and has an end date that has not been reached yet, false otherwise",
            "id": 1749,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "_isEmployeeActive",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1738,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1737,
                  "name": "_employee",
                  "nodeType": "VariableDeclaration",
                  "scope": 1749,
                  "src": "34953:26:0",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                    "typeString": "struct Payroll.Employee"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1736,
                    "name": "Employee",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 156,
                    "src": "34953:8:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                      "typeString": "struct Payroll.Employee"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "34952:28:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 1741,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1740,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1749,
                  "src": "35004:4:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 1739,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "35004:4:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "35003:6:0"
            },
            "scope": 1984,
            "src": "34926:145:0",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1762,
              "nodeType": "Block",
              "src": "35393:65:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 1757,
                          "name": "employees",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 170,
                          "src": "35428:9:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Employee_$156_storage_$",
                            "typeString": "mapping(uint256 => struct Payroll.Employee storage ref)"
                          }
                        },
                        "id": 1759,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 1758,
                          "name": "_employeeId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1751,
                          "src": "35438:11:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "35428:22:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Employee_$156_storage",
                          "typeString": "struct Payroll.Employee storage ref"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_Employee_$156_storage",
                          "typeString": "struct Payroll.Employee storage ref"
                        }
                      ],
                      "id": 1756,
                      "name": "_isEmployeeActive",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1749,
                      "src": "35410:17:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_Employee_$156_storage_ptr_$returns$_t_bool_$",
                        "typeString": "function (struct Payroll.Employee storage pointer) view returns (bool)"
                      }
                    },
                    "id": 1760,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "35410:41:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 1755,
                  "id": 1761,
                  "nodeType": "Return",
                  "src": "35403:48:0"
                }
              ]
            },
            "documentation": "@dev Tell whether an employee id is still active or not\n@param _employeeId Employee's identifier\n@return True if the employee exists and has an end date that has not been reached yet, false otherwise",
            "id": 1763,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "_isEmployeeIdActive",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1752,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1751,
                  "name": "_employeeId",
                  "nodeType": "VariableDeclaration",
                  "scope": 1763,
                  "src": "35343:19:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1750,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "35343:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "35342:21:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 1755,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1754,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1763,
                  "src": "35387:4:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 1753,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "35387:4:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "35386:6:0"
            },
            "scope": 1984,
            "src": "35314:144:0",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1795,
              "nodeType": "Block",
              "src": "35932:431:0",
              "statements": [
                {
                  "assignments": [
                    1771,
                    1773
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1771,
                      "name": "xrt",
                      "nodeType": "VariableDeclaration",
                      "scope": 1796,
                      "src": "36034:11:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint128",
                        "typeString": "uint128"
                      },
                      "typeName": {
                        "id": 1770,
                        "name": "uint128",
                        "nodeType": "ElementaryTypeName",
                        "src": "36034:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 1773,
                      "name": "when",
                      "nodeType": "VariableDeclaration",
                      "scope": 1796,
                      "src": "36047:11:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      },
                      "typeName": {
                        "id": 1772,
                        "name": "uint64",
                        "nodeType": "ElementaryTypeName",
                        "src": "36047:6:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1779,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1776,
                        "name": "denominationToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 160,
                        "src": "36084:17:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1777,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1765,
                        "src": "36135:6:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 1774,
                        "name": "feed",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 162,
                        "src": "36062:4:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IFeed_$14313",
                          "typeString": "contract IFeed"
                        }
                      },
                      "id": 1775,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "get",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 14312,
                      "src": "36062:8:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$returns$_t_uint128_$_t_uint64_$",
                        "typeString": "function (address,address) view external returns (uint128,uint64)"
                      }
                    },
                    "id": 1778,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "36062:122:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint128_$_t_uint64_$",
                      "typeString": "tuple(uint128,uint64)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "36033:151:0"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    },
                    "id": 1786,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 1783,
                          "name": "when",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1773,
                          "src": "36269:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 1780,
                            "name": "getTimestamp64",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11199,
                            "src": "36248:14:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$_t_uint64_$",
                              "typeString": "function () view returns (uint64)"
                            }
                          },
                          "id": 1781,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "36248:16:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "id": 1782,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sub",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 14159,
                        "src": "36248:20:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint64_$_t_uint64_$returns$_t_uint64_$bound_to$_t_uint64_$",
                          "typeString": "function (uint64,uint64) pure returns (uint64)"
                        }
                      },
                      "id": 1784,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "36248:26:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 1785,
                      "name": "rateExpiryTime",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 164,
                      "src": "36278:14:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "36248:44:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1790,
                  "nodeType": "IfStatement",
                  "src": "36244:83:0",
                  "trueBody": {
                    "id": 1789,
                    "nodeType": "Block",
                    "src": "36294:33:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 1787,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "36315:1:0",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "functionReturnParameters": 1769,
                        "id": 1788,
                        "nodeType": "Return",
                        "src": "36308:8:0"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1792,
                        "name": "xrt",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1771,
                        "src": "36352:3:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      ],
                      "id": 1791,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "36344:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_uint256_$",
                        "typeString": "type(uint256)"
                      },
                      "typeName": "uint256"
                    },
                    "id": 1793,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "36344:12:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 1769,
                  "id": 1794,
                  "nodeType": "Return",
                  "src": "36337:19:0"
                }
              ]
            },
            "documentation": "@dev Get exchange rate for a token based on the denomination token.\n     As an example, if the denomination token was USD and ETH's price was 100USD,\n     this would return 0.01 * precision rate for ETH.\n@param _token Token to get price of in denomination tokens\n@return Exchange rate (multiplied by the PPF rate precision)",
            "id": 1796,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "_getExchangeRateInDenominationToken",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1766,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1765,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 1796,
                  "src": "35884:14:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1764,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "35884:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "35883:16:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 1769,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1768,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1796,
                  "src": "35923:7:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1767,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "35923:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "35922:9:0"
            },
            "scope": 1984,
            "src": "35839:524:0",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1848,
              "nodeType": "Block",
              "src": "36832:457:0",
              "statements": [
                {
                  "assignments": [
                    1806
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1806,
                      "name": "timeDiff",
                      "nodeType": "VariableDeclaration",
                      "scope": 1849,
                      "src": "36842:16:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1805,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "36842:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1810,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1808,
                        "name": "_employee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1798,
                        "src": "36883:9:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                          "typeString": "struct Payroll.Employee storage pointer"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                          "typeString": "struct Payroll.Employee storage pointer"
                        }
                      ],
                      "id": 1807,
                      "name": "_getOwedPayrollPeriod",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1883,
                      "src": "36861:21:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_Employee_$156_storage_ptr_$returns$_t_uint256_$",
                        "typeString": "function (struct Payroll.Employee storage pointer) view returns (uint256)"
                      }
                    },
                    "id": 1809,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "36861:32:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "36842:51:0"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1813,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 1811,
                      "name": "timeDiff",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1806,
                      "src": "36907:8:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 1812,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "36919:1:0",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "36907:13:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1817,
                  "nodeType": "IfStatement",
                  "src": "36903:52:0",
                  "trueBody": {
                    "id": 1816,
                    "nodeType": "Block",
                    "src": "36922:33:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 1814,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "36943:1:0",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "functionReturnParameters": 1804,
                        "id": 1815,
                        "nodeType": "Return",
                        "src": "36936:8:0"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    1819
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1819,
                      "name": "salary",
                      "nodeType": "VariableDeclaration",
                      "scope": 1849,
                      "src": "36964:14:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1818,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "36964:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1822,
                  "initialValue": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 1820,
                      "name": "_employee",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1798,
                      "src": "36981:9:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                        "typeString": "struct Payroll.Employee storage pointer"
                      }
                    },
                    "id": 1821,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "denominationTokenSalary",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 138,
                    "src": "36981:33:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "36964:50:0"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "id": 1823,
                    "name": "_capped",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1800,
                    "src": "37029:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 1846,
                    "nodeType": "Block",
                    "src": "37231:52:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 1843,
                              "name": "timeDiff",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1806,
                              "src": "37263:8:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 1841,
                              "name": "salary",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1819,
                              "src": "37252:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 1842,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "mul",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 13967,
                            "src": "37252:10:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                              "typeString": "function (uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 1844,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "37252:20:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 1804,
                        "id": 1845,
                        "nodeType": "Return",
                        "src": "37245:27:0"
                      }
                    ]
                  },
                  "id": 1847,
                  "nodeType": "IfStatement",
                  "src": "37025:258:0",
                  "trueBody": {
                    "id": 1840,
                    "nodeType": "Block",
                    "src": "37038:187:0",
                    "statements": [
                      {
                        "assignments": [
                          1825
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1825,
                            "name": "result",
                            "nodeType": "VariableDeclaration",
                            "scope": 1849,
                            "src": "37107:14:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 1824,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "37107:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 1829,
                        "initialValue": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1828,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 1826,
                            "name": "salary",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1819,
                            "src": "37124:6:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "*",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 1827,
                            "name": "timeDiff",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1806,
                            "src": "37133:8:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "37124:17:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "37107:34:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "condition": {
                            "argumentTypes": null,
                            "components": [
                              {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 1834,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 1832,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "id": 1830,
                                    "name": "result",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1825,
                                    "src": "37163:6:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "/",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "id": 1831,
                                    "name": "timeDiff",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1806,
                                    "src": "37172:8:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "37163:17:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "!=",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "id": 1833,
                                  "name": "salary",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1819,
                                  "src": "37184:6:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "37163:27:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              }
                            ],
                            "id": 1835,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "37162:29:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "falseExpression": {
                            "argumentTypes": null,
                            "id": 1837,
                            "name": "result",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1825,
                            "src": "37208:6:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 1838,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "Conditional",
                          "src": "37162:52:0",
                          "trueExpression": {
                            "argumentTypes": null,
                            "id": 1836,
                            "name": "MAX_UINT256",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 61,
                            "src": "37194:11:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 1804,
                        "id": 1839,
                        "nodeType": "Return",
                        "src": "37155:59:0"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": "@dev Get owed salary since last payroll for an employee\n@param _employee Employee struct in storage\n@param _capped Safely cap the owed salary at max uint\n@return Owed salary in denomination tokens since last payroll for the employee.\n        If _capped is false, it reverts in case of an overflow.",
            "id": 1849,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "_getOwedSalarySinceLastPayroll",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1801,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1798,
                  "name": "_employee",
                  "nodeType": "VariableDeclaration",
                  "scope": 1849,
                  "src": "36758:26:0",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                    "typeString": "struct Payroll.Employee"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1797,
                    "name": "Employee",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 156,
                    "src": "36758:8:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                      "typeString": "struct Payroll.Employee"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1800,
                  "name": "_capped",
                  "nodeType": "VariableDeclaration",
                  "scope": 1849,
                  "src": "36786:12:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 1799,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "36786:4:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "36757:42:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 1804,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1803,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1849,
                  "src": "36823:7:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1802,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "36823:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "36822:9:0"
            },
            "scope": 1984,
            "src": "36718:571:0",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1882,
              "nodeType": "Block",
              "src": "37580:791:0",
              "statements": [
                {
                  "assignments": [
                    1857
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1857,
                      "name": "date",
                      "nodeType": "VariableDeclaration",
                      "scope": 1883,
                      "src": "37650:11:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      },
                      "typeName": {
                        "id": 1856,
                        "name": "uint64",
                        "nodeType": "ElementaryTypeName",
                        "src": "37650:6:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1866,
                  "initialValue": {
                    "argumentTypes": null,
                    "condition": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 1859,
                          "name": "_employee",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1851,
                          "src": "37682:9:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                            "typeString": "struct Payroll.Employee storage pointer"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                            "typeString": "struct Payroll.Employee storage pointer"
                          }
                        ],
                        "id": 1858,
                        "name": "_isEmployeeActive",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1749,
                        "src": "37664:17:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_struct$_Employee_$156_storage_ptr_$returns$_t_bool_$",
                          "typeString": "function (struct Payroll.Employee storage pointer) view returns (bool)"
                        }
                      },
                      "id": 1860,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "37664:28:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1863,
                        "name": "_employee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1851,
                        "src": "37714:9:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                          "typeString": "struct Payroll.Employee storage pointer"
                        }
                      },
                      "id": 1864,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "endDate",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 148,
                      "src": "37714:17:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "id": 1865,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "Conditional",
                    "src": "37664:67:0",
                    "trueExpression": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 1861,
                        "name": "getTimestamp64",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11199,
                        "src": "37695:14:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$__$returns$_t_uint64_$",
                          "typeString": "function () view returns (uint64)"
                        }
                      },
                      "id": 1862,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "37695:16:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "37650:81:0"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    },
                    "id": 1870,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 1867,
                      "name": "date",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1857,
                      "src": "38131:4:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1868,
                        "name": "_employee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1851,
                        "src": "38139:9:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                          "typeString": "struct Payroll.Employee storage pointer"
                        }
                      },
                      "id": 1869,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "lastPayroll",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 146,
                      "src": "38139:21:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "38131:29:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1874,
                  "nodeType": "IfStatement",
                  "src": "38127:68:0",
                  "trueBody": {
                    "id": 1873,
                    "nodeType": "Block",
                    "src": "38162:33:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 1871,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "38183:1:0",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "functionReturnParameters": 1855,
                        "id": 1872,
                        "nodeType": "Return",
                        "src": "38176:8:0"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        },
                        "id": 1879,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 1876,
                          "name": "date",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1857,
                          "src": "38335:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "-",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 1877,
                            "name": "_employee",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1851,
                            "src": "38342:9:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                              "typeString": "struct Payroll.Employee storage pointer"
                            }
                          },
                          "id": 1878,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "lastPayroll",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 146,
                          "src": "38342:21:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "src": "38335:28:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      ],
                      "id": 1875,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "38327:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_uint256_$",
                        "typeString": "type(uint256)"
                      },
                      "typeName": "uint256"
                    },
                    "id": 1880,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "38327:37:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 1855,
                  "id": 1881,
                  "nodeType": "Return",
                  "src": "38320:44:0"
                }
              ]
            },
            "documentation": "@dev Get owed payroll period for an employee\n@param _employee Employee struct in storage\n@return Owed time in seconds since the employee's last payroll date",
            "id": 1883,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "_getOwedPayrollPeriod",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1852,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1851,
                  "name": "_employee",
                  "nodeType": "VariableDeclaration",
                  "scope": 1883,
                  "src": "37520:26:0",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                    "typeString": "struct Payroll.Employee"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1850,
                    "name": "Employee",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 156,
                    "src": "37520:8:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                      "typeString": "struct Payroll.Employee"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "37519:28:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 1855,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1854,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1883,
                  "src": "37571:7:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1853,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "37571:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "37570:9:0"
            },
            "scope": 1984,
            "src": "37489:882:0",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1915,
              "nodeType": "Block",
              "src": "38859:321:0",
              "statements": [
                {
                  "assignments": [
                    1891
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1891,
                      "name": "currentOwedSalary",
                      "nodeType": "VariableDeclaration",
                      "scope": 1916,
                      "src": "38869:25:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1890,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "38869:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1896,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1893,
                        "name": "_employee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1885,
                        "src": "38928:9:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                          "typeString": "struct Payroll.Employee storage pointer"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "74727565",
                        "id": 1894,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "bool",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "38939:4:0",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "value": "true"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                          "typeString": "struct Payroll.Employee storage pointer"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 1892,
                      "name": "_getOwedSalarySinceLastPayroll",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1849,
                      "src": "38897:30:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_Employee_$156_storage_ptr_$_t_bool_$returns$_t_uint256_$",
                        "typeString": "function (struct Payroll.Employee storage pointer,bool) view returns (uint256)"
                      }
                    },
                    "id": 1895,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "38897:47:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "38869:75:0"
                },
                {
                  "assignments": [
                    1898
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1898,
                      "name": "totalOwedSalary",
                      "nodeType": "VariableDeclaration",
                      "scope": 1916,
                      "src": "38968:23:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1897,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "38968:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1903,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1902,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 1899,
                      "name": "currentOwedSalary",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1891,
                      "src": "38994:17:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "+",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1900,
                        "name": "_employee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1885,
                        "src": "39014:9:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                          "typeString": "struct Payroll.Employee storage pointer"
                        }
                      },
                      "id": 1901,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "accruedSalary",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 140,
                      "src": "39014:23:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "38994:43:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "38968:69:0"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1906,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 1904,
                      "name": "totalOwedSalary",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1898,
                      "src": "39051:15:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 1905,
                      "name": "currentOwedSalary",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1891,
                      "src": "39069:17:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "39051:35:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1912,
                  "nodeType": "IfStatement",
                  "src": "39047:95:0",
                  "trueBody": {
                    "id": 1911,
                    "nodeType": "Block",
                    "src": "39088:54:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1909,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 1907,
                            "name": "totalOwedSalary",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1898,
                            "src": "39102:15:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 1908,
                            "name": "MAX_UINT256",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 61,
                            "src": "39120:11:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "39102:29:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1910,
                        "nodeType": "ExpressionStatement",
                        "src": "39102:29:0"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1913,
                    "name": "totalOwedSalary",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1898,
                    "src": "39158:15:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 1889,
                  "id": 1914,
                  "nodeType": "Return",
                  "src": "39151:22:0"
                }
              ]
            },
            "documentation": "@dev Get owed salary since last payroll for an employee. It will take into account the accrued salary as well.\n     The result will be capped to max uint256 to avoid having an overflow.\n@param _employee Employee struct in storage\n@return Employee's total owed salary: current owed payroll since the last payroll date, plus the accrued salary.",
            "id": 1916,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "_getTotalOwedCappedSalary",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1886,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1885,
                  "name": "_employee",
                  "nodeType": "VariableDeclaration",
                  "scope": 1916,
                  "src": "38799:26:0",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                    "typeString": "struct Payroll.Employee"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1884,
                    "name": "Employee",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 156,
                    "src": "38799:8:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                      "typeString": "struct Payroll.Employee"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "38798:28:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 1889,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1888,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1916,
                  "src": "38850:7:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1887,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "38850:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "38849:9:0"
            },
            "scope": 1984,
            "src": "38764:416:0",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1951,
              "nodeType": "Block",
              "src": "39467:326:0",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_PaymentType_$134",
                      "typeString": "enum Payroll.PaymentType"
                    },
                    "id": 1926,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 1923,
                      "name": "_type",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1918,
                      "src": "39481:5:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_PaymentType_$134",
                        "typeString": "enum Payroll.PaymentType"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1924,
                        "name": "PaymentType",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 134,
                        "src": "39490:11:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_PaymentType_$134_$",
                          "typeString": "type(enum Payroll.PaymentType)"
                        }
                      },
                      "id": 1925,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "Payroll",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "39490:19:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_PaymentType_$134",
                        "typeString": "enum Payroll.PaymentType"
                      }
                    },
                    "src": "39481:28:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "condition": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_enum$_PaymentType_$134",
                        "typeString": "enum Payroll.PaymentType"
                      },
                      "id": 1933,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 1930,
                        "name": "_type",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1918,
                        "src": "39570:5:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_PaymentType_$134",
                          "typeString": "enum Payroll.PaymentType"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 1931,
                          "name": "PaymentType",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 134,
                          "src": "39579:11:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_enum$_PaymentType_$134_$",
                            "typeString": "type(enum Payroll.PaymentType)"
                          }
                        },
                        "id": 1932,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberName": "Reimbursement",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "39579:25:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_PaymentType_$134",
                          "typeString": "enum Payroll.PaymentType"
                        }
                      },
                      "src": "39570:34:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseBody": null,
                    "id": 1937,
                    "nodeType": "IfStatement",
                    "src": "39566:96:0",
                    "trueBody": {
                      "id": 1936,
                      "nodeType": "Block",
                      "src": "39606:56:0",
                      "statements": [
                        {
                          "expression": {
                            "argumentTypes": null,
                            "hexValue": "456d706c6f796565207265696d62757273656d656e74",
                            "id": 1934,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "39627:24:0",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_bbb2ad9332292ede951972e02d091a13684c35a8d15242ca014d83fc24223c70",
                              "typeString": "literal_string \"Employee reimbursement\""
                            },
                            "value": "Employee reimbursement"
                          },
                          "functionReturnParameters": 1922,
                          "id": 1935,
                          "nodeType": "Return",
                          "src": "39620:31:0"
                        }
                      ]
                    }
                  },
                  "id": 1938,
                  "nodeType": "IfStatement",
                  "src": "39477:185:0",
                  "trueBody": {
                    "id": 1929,
                    "nodeType": "Block",
                    "src": "39511:49:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "456d706c6f7965652073616c617279",
                          "id": 1927,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "string",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "39532:17:0",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_stringliteral_9663ea10cc7328675b783385c4968d93ca8f6560fb62ecadc3bab8fb17894e44",
                            "typeString": "literal_string \"Employee salary\""
                          },
                          "value": "Employee salary"
                        },
                        "functionReturnParameters": 1922,
                        "id": 1928,
                        "nodeType": "Return",
                        "src": "39525:24:0"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_PaymentType_$134",
                      "typeString": "enum Payroll.PaymentType"
                    },
                    "id": 1942,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 1939,
                      "name": "_type",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1918,
                      "src": "39667:5:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_PaymentType_$134",
                        "typeString": "enum Payroll.PaymentType"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1940,
                        "name": "PaymentType",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 134,
                        "src": "39676:11:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_PaymentType_$134_$",
                          "typeString": "type(enum Payroll.PaymentType)"
                        }
                      },
                      "id": 1941,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "Bonus",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "39676:17:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_PaymentType_$134",
                        "typeString": "enum Payroll.PaymentType"
                      }
                    },
                    "src": "39667:26:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1946,
                  "nodeType": "IfStatement",
                  "src": "39663:80:0",
                  "trueBody": {
                    "id": 1945,
                    "nodeType": "Block",
                    "src": "39695:48:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "456d706c6f79656520626f6e7573",
                          "id": 1943,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "string",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "39716:16:0",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_stringliteral_2016c14dd8969cad91c4b8ce072ffc5ec4536027be9b0c8d966002f125494149",
                            "typeString": "literal_string \"Employee bonus\""
                          },
                          "value": "Employee bonus"
                        },
                        "functionReturnParameters": 1922,
                        "id": 1944,
                        "nodeType": "Return",
                        "src": "39709:23:0"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1948,
                        "name": "ERROR_INVALID_PAYMENT_TYPE",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 100,
                        "src": "39759:26:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 1947,
                      "name": "revert",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        15158,
                        15159
                      ],
                      "referencedDeclaration": 15159,
                      "src": "39752:6:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (string memory) pure"
                      }
                    },
                    "id": 1949,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "39752:34:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1950,
                  "nodeType": "ExpressionStatement",
                  "src": "39752:34:0"
                }
              ]
            },
            "documentation": "@dev Get payment reference for a given payment type\n@param _type Payment type to query the reference of\n@return Payment reference for the given payment type",
            "id": 1952,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "_paymentReferenceFor",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1919,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1918,
                  "name": "_type",
                  "nodeType": "VariableDeclaration",
                  "scope": 1952,
                  "src": "39410:17:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_PaymentType_$134",
                    "typeString": "enum Payroll.PaymentType"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1917,
                    "name": "PaymentType",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 134,
                    "src": "39410:11:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_PaymentType_$134",
                      "typeString": "enum Payroll.PaymentType"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "39409:19:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 1922,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1921,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1952,
                  "src": "39452:6:0",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 1920,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "39452:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "39451:15:0"
            },
            "scope": 1984,
            "src": "39380:413:0",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1982,
              "nodeType": "Block",
              "src": "39907:213:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 1964,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 1962,
                          "name": "_owedAmount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1954,
                          "src": "39925:11:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 1963,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "39939:1:0",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "39925:15:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1965,
                        "name": "ERROR_NOTHING_PAID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 103,
                        "src": "39942:18:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 1961,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        15156,
                        15157
                      ],
                      "referencedDeclaration": 15157,
                      "src": "39917:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1966,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "39917:44:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1967,
                  "nodeType": "ExpressionStatement",
                  "src": "39917:44:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 1971,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 1969,
                          "name": "_owedAmount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1954,
                          "src": "39979:11:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 1970,
                          "name": "_requestedAmount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1956,
                          "src": "39994:16:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "39979:31:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1972,
                        "name": "ERROR_INVALID_REQUESTED_AMOUNT",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 130,
                        "src": "40012:30:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 1968,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        15156,
                        15157
                      ],
                      "referencedDeclaration": 15157,
                      "src": "39971:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1973,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "39971:72:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1974,
                  "nodeType": "ExpressionStatement",
                  "src": "39971:72:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "condition": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 1977,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 1975,
                        "name": "_requestedAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1956,
                        "src": "40060:16:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": ">",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 1976,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "40079:1:0",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "40060:20:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseExpression": {
                      "argumentTypes": null,
                      "id": 1979,
                      "name": "_owedAmount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1954,
                      "src": "40102:11:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 1980,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "Conditional",
                    "src": "40060:53:0",
                    "trueExpression": {
                      "argumentTypes": null,
                      "id": 1978,
                      "name": "_requestedAmount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1956,
                      "src": "40083:16:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 1960,
                  "id": 1981,
                  "nodeType": "Return",
                  "src": "40053:60:0"
                }
              ]
            },
            "documentation": null,
            "id": 1983,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "_ensurePaymentAmount",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1957,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1954,
                  "name": "_owedAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 1983,
                  "src": "39829:19:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1953,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "39829:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1956,
                  "name": "_requestedAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 1983,
                  "src": "39850:24:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1955,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "39850:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "39828:47:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 1960,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1959,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1983,
                  "src": "39898:7:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1958,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "39898:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "39897:9:0"
            },
            "scope": 1984,
            "src": "39799:321:0",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "private"
          }
        ],
        "scope": 1985,
        "src": "508:39614:0"
      }
    ],
    "src": "0:40123:0"
  },
  "legacyAST": {
    "absolutePath": "/Users/facu/Documents/work/aragon/dev/aragon-apps/future-apps/payroll/contracts/Payroll.sol",
    "exportedSymbols": {
      "Payroll": [
        1984
      ]
    },
    "id": 1985,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 1,
        "literals": [
          "solidity",
          "0.4",
          ".24"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:0"
      },
      {
        "absolutePath": "@aragon/os/contracts/apps/AragonApp.sol",
        "file": "@aragon/os/contracts/apps/AragonApp.sol",
        "id": 2,
        "nodeType": "ImportDirective",
        "scope": 1985,
        "sourceUnit": 10490,
        "src": "25:49:0",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@aragon/os/contracts/common/EtherTokenConstant.sol",
        "file": "@aragon/os/contracts/common/EtherTokenConstant.sol",
        "id": 3,
        "nodeType": "ImportDirective",
        "scope": 1985,
        "sourceUnit": 10663,
        "src": "75:60:0",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@aragon/os/contracts/common/IsContract.sol",
        "file": "@aragon/os/contracts/common/IsContract.sol",
        "id": 4,
        "nodeType": "ImportDirective",
        "scope": 1985,
        "sourceUnit": 10839,
        "src": "136:52:0",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@aragon/os/contracts/common/IForwarder.sol",
        "file": "@aragon/os/contracts/common/IForwarder.sol",
        "id": 5,
        "nodeType": "ImportDirective",
        "scope": 1985,
        "sourceUnit": 10685,
        "src": "189:52:0",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@aragon/os/contracts/lib/math/SafeMath.sol",
        "file": "@aragon/os/contracts/lib/math/SafeMath.sol",
        "id": 6,
        "nodeType": "ImportDirective",
        "scope": 1985,
        "sourceUnit": 14065,
        "src": "243:52:0",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@aragon/os/contracts/lib/math/SafeMath64.sol",
        "file": "@aragon/os/contracts/lib/math/SafeMath64.sol",
        "id": 7,
        "nodeType": "ImportDirective",
        "scope": 1985,
        "sourceUnit": 14207,
        "src": "296:54:0",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@aragon/ppf-contracts/contracts/IFeed.sol",
        "file": "@aragon/ppf-contracts/contracts/IFeed.sol",
        "id": 8,
        "nodeType": "ImportDirective",
        "scope": 1985,
        "sourceUnit": 14314,
        "src": "352:51:0",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@aragon/apps-finance/contracts/Finance.sol",
        "file": "@aragon/apps-finance/contracts/Finance.sol",
        "id": 9,
        "nodeType": "ImportDirective",
        "scope": 1985,
        "sourceUnit": 5529,
        "src": "404:52:0",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 10,
              "name": "EtherTokenConstant",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 10662,
              "src": "528:18:0",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_EtherTokenConstant_$10662",
                "typeString": "contract EtherTokenConstant"
              }
            },
            "id": 11,
            "nodeType": "InheritanceSpecifier",
            "src": "528:18:0"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 12,
              "name": "IForwarder",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 10684,
              "src": "548:10:0",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IForwarder_$10684",
                "typeString": "contract IForwarder"
              }
            },
            "id": 13,
            "nodeType": "InheritanceSpecifier",
            "src": "548:10:0"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 14,
              "name": "IsContract",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 10838,
              "src": "560:10:0",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IsContract_$10838",
                "typeString": "contract IsContract"
              }
            },
            "id": 15,
            "nodeType": "InheritanceSpecifier",
            "src": "560:10:0"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 16,
              "name": "AragonApp",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 10489,
              "src": "572:9:0",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_AragonApp_$10489",
                "typeString": "contract AragonApp"
              }
            },
            "id": 17,
            "nodeType": "InheritanceSpecifier",
            "src": "572:9:0"
          }
        ],
        "contractDependencies": [
          9577,
          10365,
          10489,
          10502,
          10662,
          10684,
          10712,
          10810,
          10838,
          10871,
          10908,
          11200,
          11422,
          11823,
          11850,
          13114
        ],
        "contractKind": "contract",
        "documentation": "@title Payroll in multiple currencies",
        "fullyImplemented": true,
        "id": 1984,
        "linearizedBaseContracts": [
          1984,
          10489,
          9577,
          11823,
          13114,
          11850,
          10908,
          11422,
          10838,
          10684,
          10662,
          10712,
          10502,
          10871,
          10810,
          11200,
          10365
        ],
        "name": "Payroll",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 20,
            "libraryName": {
              "contractScope": null,
              "id": 18,
              "name": "SafeMath",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 14064,
              "src": "594:8:0",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_SafeMath_$14064",
                "typeString": "library SafeMath"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "588:27:0",
            "typeName": {
              "id": 19,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "607:7:0",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            }
          },
          {
            "id": 23,
            "libraryName": {
              "contractScope": null,
              "id": 21,
              "name": "SafeMath64",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 14206,
              "src": "626:10:0",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_SafeMath64_$14206",
                "typeString": "library SafeMath64"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "620:28:0",
            "typeName": {
              "id": 22,
              "name": "uint64",
              "nodeType": "ElementaryTypeName",
              "src": "641:6:0",
              "typeDescriptions": {
                "typeIdentifier": "t_uint64",
                "typeString": "uint64"
              }
            }
          },
          {
            "constant": true,
            "id": 26,
            "name": "ADD_EMPLOYEE_ROLE",
            "nodeType": "VariableDeclaration",
            "scope": 1984,
            "src": "1427:110:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 24,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "1427:7:0",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "307839656364633363363337313662343564303735366565636535666531363134636165313838396563356131636536326233313237633166316631363135643665",
              "id": 25,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1471:66:0",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_71828984908844238555949328342089860675847136120918376188830129238999052672366_by_1",
                "typeString": "int_const 7182...(69 digits omitted)...2366"
              },
              "value": "0x9ecdc3c63716b45d0756eece5fe1614cae1889ec5a1ce62b3127c1f1f1615d6e"
            },
            "visibility": "public"
          },
          {
            "constant": true,
            "id": 29,
            "name": "TERMINATE_EMPLOYEE_ROLE",
            "nodeType": "VariableDeclaration",
            "scope": 1984,
            "src": "1543:116:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 27,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "1543:7:0",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "307836396336376639313464313262363434306537646466303139363132313438313864393135386662636231393231316530666634323830306664656139323432",
              "id": 28,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1593:66:0",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_47843565259164144133809461170372969702816497096869277417040675769185680921154_by_1",
                "typeString": "int_const 4784...(69 digits omitted)...1154"
              },
              "value": "0x69c67f914d12b6440e7ddf01961214818d9158fbcb19211e0ff42800fdea9242"
            },
            "visibility": "public"
          },
          {
            "constant": true,
            "id": 32,
            "name": "SET_EMPLOYEE_SALARY_ROLE",
            "nodeType": "VariableDeclaration",
            "scope": 1984,
            "src": "1665:117:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 30,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "1665:7:0",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "307865613961633635303138646132343231636634313965653231353233373134343063303832363761313933613333636363316533393534356431393765343464",
              "id": 31,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1716:66:0",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_106114669721649837030210016195818868806878882966462230778670002579541547541581_by_1",
                "typeString": "int_const 1061...(70 digits omitted)...1581"
              },
              "value": "0xea9ac65018da2421cf419ee2152371440c08267a193a33ccc1e39545d197e44d"
            },
            "visibility": "public"
          },
          {
            "constant": true,
            "id": 35,
            "name": "ADD_BONUS_ROLE",
            "nodeType": "VariableDeclaration",
            "scope": 1984,
            "src": "1788:107:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 33,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "1788:7:0",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "307863656361376532663565623734396138376161663638663366373664366239323531616132663436303066313366393363356134616466376137326466346165",
              "id": 34,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1829:66:0",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_93534220812370054220978265633527830468714367242977563805072917605995456099502_by_1",
                "typeString": "int_const 9353...(69 digits omitted)...9502"
              },
              "value": "0xceca7e2f5eb749a87aaf68f3f76d6b9251aa2f4600f13f93c5a4adf7a72df4ae"
            },
            "visibility": "public"
          },
          {
            "constant": true,
            "id": 38,
            "name": "ADD_REIMBURSEMENT_ROLE",
            "nodeType": "VariableDeclaration",
            "scope": 1984,
            "src": "1901:115:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 36,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "1901:7:0",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "307839303639386239643534343237663165343136333630323530313733303962646231623535333230646139363063383834356261623061353034623031613136",
              "id": 37,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1950:66:0",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_65319532722119508507784416685044973991992190640648452491307818028309280725526_by_1",
                "typeString": "int_const 6531...(69 digits omitted)...5526"
              },
              "value": "0x90698b9d54427f1e41636025017309bdb1b55320da960c8845bab0a504b01a16"
            },
            "visibility": "public"
          },
          {
            "constant": true,
            "id": 41,
            "name": "MANAGE_ALLOWED_TOKENS_ROLE",
            "nodeType": "VariableDeclaration",
            "scope": 1984,
            "src": "2022:119:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 39,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "2022:7:0",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "307830626533343938376334353730306565336661653863353565323730343138626139303333333764656363366261636231383739353034626539333331633036",
              "id": 40,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "2075:66:0",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_5377023105873739678085461058163298743547224377491716976682656041718999358470_by_1",
                "typeString": "int_const 5377...(68 digits omitted)...8470"
              },
              "value": "0x0be34987c45700ee3fae8c55e270418ba903337decc6bacb1879504be9331c06"
            },
            "visibility": "public"
          },
          {
            "constant": true,
            "id": 44,
            "name": "MODIFY_PRICE_FEED_ROLE",
            "nodeType": "VariableDeclaration",
            "scope": 1984,
            "src": "2147:115:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 42,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "2147:7:0",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "307837343335306566626362613862383533343163356262663730636333346532613538356663313436333532343737336131326661306137316434656239333032",
              "id": 43,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "2196:66:0",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_52562036742935426542814051682274598831193441213500536100195688242734636438274_by_1",
                "typeString": "int_const 5256...(69 digits omitted)...8274"
              },
              "value": "0x74350efbcba8b85341c5bbf70cc34e2a585fc1463524773a12fa0a71d4eb9302"
            },
            "visibility": "public"
          },
          {
            "constant": true,
            "id": 47,
            "name": "MODIFY_RATE_EXPIRY_ROLE",
            "nodeType": "VariableDeclaration",
            "scope": 1984,
            "src": "2268:116:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 45,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "2268:7:0",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "307837396665393839613838393930363064666264616262313734656262393636313666613966316439646164643733396638643831346362616234353234303465",
              "id": 46,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "2318:66:0",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_55179687064690863465427953388742629249966644689543679381930473656019565297742_by_1",
                "typeString": "int_const 5517...(69 digits omitted)...7742"
              },
              "value": "0x79fe989a8899060dfbdabb174ebb96616fa9f1d9dadd739f8d814cbab452404e"
            },
            "visibility": "public"
          },
          {
            "constant": true,
            "id": 50,
            "name": "MAX_ALLOWED_TOKENS",
            "nodeType": "VariableDeclaration",
            "scope": 1984,
            "src": "2391:49:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 48,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "2391:7:0",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "3230",
              "id": 49,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "2438:2:0",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_20_by_1",
                "typeString": "int_const 20"
              },
              "value": "20"
            },
            "visibility": "internal"
          },
          {
            "constant": true,
            "id": 55,
            "name": "MIN_RATE_EXPIRY",
            "nodeType": "VariableDeclaration",
            "scope": 1984,
            "src": "2484:60:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint64",
              "typeString": "uint64"
            },
            "typeName": {
              "id": 51,
              "name": "uint64",
              "nodeType": "ElementaryTypeName",
              "src": "2484:6:0",
              "typeDescriptions": {
                "typeIdentifier": "t_uint64",
                "typeString": "uint64"
              }
            },
            "value": {
              "argumentTypes": null,
              "arguments": [
                {
                  "argumentTypes": null,
                  "hexValue": "31",
                  "id": 53,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "kind": "number",
                  "lValueRequested": false,
                  "nodeType": "Literal",
                  "src": "2534:9:0",
                  "subdenomination": "minutes",
                  "typeDescriptions": {
                    "typeIdentifier": "t_rational_60_by_1",
                    "typeString": "int_const 60"
                  },
                  "value": "1"
                }
              ],
              "expression": {
                "argumentTypes": [
                  {
                    "typeIdentifier": "t_rational_60_by_1",
                    "typeString": "int_const 60"
                  }
                ],
                "id": 52,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "lValueRequested": false,
                "nodeType": "ElementaryTypeNameExpression",
                "src": "2527:6:0",
                "typeDescriptions": {
                  "typeIdentifier": "t_type$_t_uint64_$",
                  "typeString": "type(uint64)"
                },
                "typeName": "uint64"
              },
              "id": 54,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "typeConversion",
              "lValueRequested": false,
              "names": [],
              "nodeType": "FunctionCall",
              "src": "2527:17:0",
              "typeDescriptions": {
                "typeIdentifier": "t_uint64",
                "typeString": "uint64"
              }
            },
            "visibility": "internal"
          },
          {
            "constant": true,
            "id": 61,
            "name": "MAX_UINT256",
            "nodeType": "VariableDeclaration",
            "scope": 1984,
            "src": "2625:51:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 56,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "2625:7:0",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "argumentTypes": null,
              "arguments": [
                {
                  "argumentTypes": null,
                  "id": 59,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "lValueRequested": false,
                  "nodeType": "UnaryOperation",
                  "operator": "-",
                  "prefix": true,
                  "src": "2673:2:0",
                  "subExpression": {
                    "argumentTypes": null,
                    "hexValue": "31",
                    "id": 58,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "2674:1:0",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_1_by_1",
                      "typeString": "int_const 1"
                    },
                    "value": "1"
                  },
                  "typeDescriptions": {
                    "typeIdentifier": "t_rational_-1_by_1",
                    "typeString": "int_const -1"
                  }
                }
              ],
              "expression": {
                "argumentTypes": [
                  {
                    "typeIdentifier": "t_rational_-1_by_1",
                    "typeString": "int_const -1"
                  }
                ],
                "id": 57,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "lValueRequested": false,
                "nodeType": "ElementaryTypeNameExpression",
                "src": "2665:7:0",
                "typeDescriptions": {
                  "typeIdentifier": "t_type$_t_uint256_$",
                  "typeString": "type(uint256)"
                },
                "typeName": "uint256"
              },
              "id": 60,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "typeConversion",
              "lValueRequested": false,
              "names": [],
              "nodeType": "FunctionCall",
              "src": "2665:11:0",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "visibility": "internal"
          },
          {
            "constant": true,
            "id": 67,
            "name": "MAX_UINT64",
            "nodeType": "VariableDeclaration",
            "scope": 1984,
            "src": "2682:48:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint64",
              "typeString": "uint64"
            },
            "typeName": {
              "id": 62,
              "name": "uint64",
              "nodeType": "ElementaryTypeName",
              "src": "2682:6:0",
              "typeDescriptions": {
                "typeIdentifier": "t_uint64",
                "typeString": "uint64"
              }
            },
            "value": {
              "argumentTypes": null,
              "arguments": [
                {
                  "argumentTypes": null,
                  "id": 65,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "lValueRequested": false,
                  "nodeType": "UnaryOperation",
                  "operator": "-",
                  "prefix": true,
                  "src": "2727:2:0",
                  "subExpression": {
                    "argumentTypes": null,
                    "hexValue": "31",
                    "id": 64,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "2728:1:0",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_1_by_1",
                      "typeString": "int_const 1"
                    },
                    "value": "1"
                  },
                  "typeDescriptions": {
                    "typeIdentifier": "t_rational_-1_by_1",
                    "typeString": "int_const -1"
                  }
                }
              ],
              "expression": {
                "argumentTypes": [
                  {
                    "typeIdentifier": "t_rational_-1_by_1",
                    "typeString": "int_const -1"
                  }
                ],
                "id": 63,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "lValueRequested": false,
                "nodeType": "ElementaryTypeNameExpression",
                "src": "2720:6:0",
                "typeDescriptions": {
                  "typeIdentifier": "t_type$_t_uint64_$",
                  "typeString": "type(uint64)"
                },
                "typeName": "uint64"
              },
              "id": 66,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "typeConversion",
              "lValueRequested": false,
              "names": [],
              "nodeType": "FunctionCall",
              "src": "2720:10:0",
              "typeDescriptions": {
                "typeIdentifier": "t_uint64",
                "typeString": "uint64"
              }
            },
            "visibility": "internal"
          },
          {
            "constant": true,
            "id": 70,
            "name": "ERROR_EMPLOYEE_DOESNT_EXIST",
            "nodeType": "VariableDeclaration",
            "scope": 1984,
            "src": "2737:85:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 68,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "2737:6:0",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "504159524f4c4c5f454d504c4f5945455f444f45534e545f4558495354",
              "id": 69,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "2791:31:0",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_3040532e3b003e5956a88c57b05878bc6423f278034ae52388cd63165fc3e833",
                "typeString": "literal_string \"PAYROLL_EMPLOYEE_DOESNT_EXIST\""
              },
              "value": "PAYROLL_EMPLOYEE_DOESNT_EXIST"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 73,
            "name": "ERROR_NON_ACTIVE_EMPLOYEE",
            "nodeType": "VariableDeclaration",
            "scope": 1984,
            "src": "2828:81:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 71,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "2828:6:0",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "504159524f4c4c5f4e4f4e5f4143544956455f454d504c4f594545",
              "id": 72,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "2880:29:0",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_c682094980d6d373c27c2d307a90340c49b0ecc0d315e2545a5fe5f38cd22281",
                "typeString": "literal_string \"PAYROLL_NON_ACTIVE_EMPLOYEE\""
              },
              "value": "PAYROLL_NON_ACTIVE_EMPLOYEE"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 76,
            "name": "ERROR_SENDER_DOES_NOT_MATCH",
            "nodeType": "VariableDeclaration",
            "scope": 1984,
            "src": "2915:85:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 74,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "2915:6:0",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "504159524f4c4c5f53454e4445525f444f45535f4e4f545f4d41544348",
              "id": 75,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "2969:31:0",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_d92783ff5ae559953bfbd87f56aee966d525be74f6a39bc0866fa203fa3c0f8a",
                "typeString": "literal_string \"PAYROLL_SENDER_DOES_NOT_MATCH\""
              },
              "value": "PAYROLL_SENDER_DOES_NOT_MATCH"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 79,
            "name": "ERROR_FINANCE_NOT_CONTRACT",
            "nodeType": "VariableDeclaration",
            "scope": 1984,
            "src": "3006:83:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 77,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "3006:6:0",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "504159524f4c4c5f46494e414e43455f4e4f545f434f4e5452414354",
              "id": 78,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "3059:30:0",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_d92c79f660c45904491a2e152d329cf0af88eb1d4cc25a3d6e9eb1a904d6c845",
                "typeString": "literal_string \"PAYROLL_FINANCE_NOT_CONTRACT\""
              },
              "value": "PAYROLL_FINANCE_NOT_CONTRACT"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 82,
            "name": "ERROR_TOKEN_ALREADY_SET",
            "nodeType": "VariableDeclaration",
            "scope": 1984,
            "src": "3095:77:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 80,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "3095:6:0",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "504159524f4c4c5f544f4b454e5f414c52454144595f534554",
              "id": 81,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "3145:27:0",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_7e7c4931d53d3a41fb1f6d61fa04c207cf3489ec4abea554460f89237b69ac42",
                "typeString": "literal_string \"PAYROLL_TOKEN_ALREADY_SET\""
              },
              "value": "PAYROLL_TOKEN_ALREADY_SET"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 85,
            "name": "ERROR_MAX_ALLOWED_TOKENS",
            "nodeType": "VariableDeclaration",
            "scope": 1984,
            "src": "3178:79:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 83,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "3178:6:0",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "504159524f4c4c5f4d41585f414c4c4f5745445f544f4b454e53",
              "id": 84,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "3229:28:0",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_6248890f2c0e5a94b2f632d1ea130498e2cd1d7fe8f78f6fd33e1602a4e882c7",
                "typeString": "literal_string \"PAYROLL_MAX_ALLOWED_TOKENS\""
              },
              "value": "PAYROLL_MAX_ALLOWED_TOKENS"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 88,
            "name": "ERROR_MIN_RATES_MISMATCH",
            "nodeType": "VariableDeclaration",
            "scope": 1984,
            "src": "3263:79:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 86,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "3263:6:0",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "504159524f4c4c5f4d494e5f52415445535f4d49534d41544348",
              "id": 87,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "3314:28:0",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_59371e66108cb1395269c6c526f0d6be400c1fc6656273dc7e3b4b831daa386c",
                "typeString": "literal_string \"PAYROLL_MIN_RATES_MISMATCH\""
              },
              "value": "PAYROLL_MIN_RATES_MISMATCH"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 91,
            "name": "ERROR_TOKEN_ALLOCATION_MISMATCH",
            "nodeType": "VariableDeclaration",
            "scope": 1984,
            "src": "3348:93:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 89,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "3348:6:0",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "504159524f4c4c5f544f4b454e5f414c4c4f434154494f4e5f4d49534d41544348",
              "id": 90,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "3406:35:0",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_038fbdf003f0f02882a927a19a4a83f61295ba2b16b03154c04f677baaec410c",
                "typeString": "literal_string \"PAYROLL_TOKEN_ALLOCATION_MISMATCH\""
              },
              "value": "PAYROLL_TOKEN_ALLOCATION_MISMATCH"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 94,
            "name": "ERROR_NOT_ALLOWED_TOKEN",
            "nodeType": "VariableDeclaration",
            "scope": 1984,
            "src": "3447:77:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 92,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "3447:6:0",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "504159524f4c4c5f4e4f545f414c4c4f5745445f544f4b454e",
              "id": 93,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "3497:27:0",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_e8fcfddcb695540943ae2ed4e50145415d7c0b93c25369bc835f6df2d9b3dd7d",
                "typeString": "literal_string \"PAYROLL_NOT_ALLOWED_TOKEN\""
              },
              "value": "PAYROLL_NOT_ALLOWED_TOKEN"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 97,
            "name": "ERROR_DISTRIBUTION_NOT_FULL",
            "nodeType": "VariableDeclaration",
            "scope": 1984,
            "src": "3530:85:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 95,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "3530:6:0",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "504159524f4c4c5f444953545249425554494f4e5f4e4f545f46554c4c",
              "id": 96,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "3584:31:0",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_9bfe203c9c2dccdf906a33d300236c6472ef4e55c862f4f7d82a05d474145ee6",
                "typeString": "literal_string \"PAYROLL_DISTRIBUTION_NOT_FULL\""
              },
              "value": "PAYROLL_DISTRIBUTION_NOT_FULL"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 100,
            "name": "ERROR_INVALID_PAYMENT_TYPE",
            "nodeType": "VariableDeclaration",
            "scope": 1984,
            "src": "3621:83:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 98,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "3621:6:0",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "504159524f4c4c5f494e56414c49445f5041594d454e545f54595045",
              "id": 99,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "3674:30:0",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_fbeb10f9b50b0fb2daf96e799b8fb1a904855b117f7cd54b79ea18fb7f811e60",
                "typeString": "literal_string \"PAYROLL_INVALID_PAYMENT_TYPE\""
              },
              "value": "PAYROLL_INVALID_PAYMENT_TYPE"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 103,
            "name": "ERROR_NOTHING_PAID",
            "nodeType": "VariableDeclaration",
            "scope": 1984,
            "src": "3710:67:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 101,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "3710:6:0",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "504159524f4c4c5f4e4f5448494e475f50414944",
              "id": 102,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "3755:22:0",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_464ab43351bb39adf29249dc95c2c8d013eb81eba7ad49e0c243b46e98877fad",
                "typeString": "literal_string \"PAYROLL_NOTHING_PAID\""
              },
              "value": "PAYROLL_NOTHING_PAID"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 106,
            "name": "ERROR_CAN_NOT_FORWARD",
            "nodeType": "VariableDeclaration",
            "scope": 1984,
            "src": "3783:73:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 104,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "3783:6:0",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "504159524f4c4c5f43414e5f4e4f545f464f5257415244",
              "id": 105,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "3831:25:0",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_af8e5d8414fe16fa841e3381a7b160e73f4bf11f9e7297d242f6bd149109a9a8",
                "typeString": "literal_string \"PAYROLL_CAN_NOT_FORWARD\""
              },
              "value": "PAYROLL_CAN_NOT_FORWARD"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 109,
            "name": "ERROR_EMPLOYEE_NULL_ADDRESS",
            "nodeType": "VariableDeclaration",
            "scope": 1984,
            "src": "3862:85:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 107,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "3862:6:0",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "504159524f4c4c5f454d504c4f5945455f4e554c4c5f41444452455353",
              "id": 108,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "3916:31:0",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_f7cfac5b02ff2c79859c54a3fce4f9af5759533401210b72d16082aae2bfe2ee",
                "typeString": "literal_string \"PAYROLL_EMPLOYEE_NULL_ADDRESS\""
              },
              "value": "PAYROLL_EMPLOYEE_NULL_ADDRESS"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 112,
            "name": "ERROR_EMPLOYEE_ALREADY_EXIST",
            "nodeType": "VariableDeclaration",
            "scope": 1984,
            "src": "3953:87:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 110,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "3953:6:0",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "504159524f4c4c5f454d504c4f5945455f414c52454144595f4558495354",
              "id": 111,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "4008:32:0",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_a98a26435327a3c46844ea4f9836be81c5293fc8a885b94b45f249465ed93698",
                "typeString": "literal_string \"PAYROLL_EMPLOYEE_ALREADY_EXIST\""
              },
              "value": "PAYROLL_EMPLOYEE_ALREADY_EXIST"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 115,
            "name": "ERROR_FEED_NOT_CONTRACT",
            "nodeType": "VariableDeclaration",
            "scope": 1984,
            "src": "4046:77:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 113,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "4046:6:0",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "504159524f4c4c5f464545445f4e4f545f434f4e5452414354",
              "id": 114,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "4096:27:0",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_e2229bd8fbc473114577fbfae659ff9b1622a8653983fbae3408e8827cdabab1",
                "typeString": "literal_string \"PAYROLL_FEED_NOT_CONTRACT\""
              },
              "value": "PAYROLL_FEED_NOT_CONTRACT"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 118,
            "name": "ERROR_EXPIRY_TIME_TOO_SHORT",
            "nodeType": "VariableDeclaration",
            "scope": 1984,
            "src": "4129:85:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 116,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "4129:6:0",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "504159524f4c4c5f4558504952595f54494d455f544f4f5f53484f5254",
              "id": 117,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "4183:31:0",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_086e83ae4281322c96b09123c7687db7954640ecec690b5d0edb6dbfc17b5ec7",
                "typeString": "literal_string \"PAYROLL_EXPIRY_TIME_TOO_SHORT\""
              },
              "value": "PAYROLL_EXPIRY_TIME_TOO_SHORT"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 121,
            "name": "ERROR_PAST_TERMINATION_DATE",
            "nodeType": "VariableDeclaration",
            "scope": 1984,
            "src": "4220:85:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 119,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "4220:6:0",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "504159524f4c4c5f504153545f5445524d494e4154494f4e5f44415445",
              "id": 120,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "4274:31:0",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_f89359950816e67b7f2b736b5cf048d89ad0e907dad0a20830ca273ef80123c3",
                "typeString": "literal_string \"PAYROLL_PAST_TERMINATION_DATE\""
              },
              "value": "PAYROLL_PAST_TERMINATION_DATE"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 124,
            "name": "ERROR_EXCHANGE_RATE_TOO_LOW",
            "nodeType": "VariableDeclaration",
            "scope": 1984,
            "src": "4311:85:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 122,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "4311:6:0",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "504159524f4c4c5f45584348414e47455f524154455f544f4f5f4c4f57",
              "id": 123,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "4365:31:0",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_eb441e990ecc79e1ceb2fbfc7c3c1b397bafc4965502d3fc610dffa691801763",
                "typeString": "literal_string \"PAYROLL_EXCHANGE_RATE_TOO_LOW\""
              },
              "value": "PAYROLL_EXCHANGE_RATE_TOO_LOW"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 127,
            "name": "ERROR_LAST_PAYROLL_DATE_TOO_BIG",
            "nodeType": "VariableDeclaration",
            "scope": 1984,
            "src": "4402:85:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 125,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "4402:6:0",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "504159524f4c4c5f4c4153545f444154455f544f4f5f424947",
              "id": 126,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "4460:27:0",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_d7e3eb66175393d9f4258ad8eed97a7c810366d3f61f9ce25a8f6f1cc275ec95",
                "typeString": "literal_string \"PAYROLL_LAST_DATE_TOO_BIG\""
              },
              "value": "PAYROLL_LAST_DATE_TOO_BIG"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 130,
            "name": "ERROR_INVALID_REQUESTED_AMOUNT",
            "nodeType": "VariableDeclaration",
            "scope": 1984,
            "src": "4493:88:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 128,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "4493:6:0",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "504159524f4c4c5f494e56414c49445f5245515545535445445f414d54",
              "id": 129,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "4550:31:0",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_bf445dfdf1e5b661f5955441508282db24b09bddac520fbaae8ce53716cb894e",
                "typeString": "literal_string \"PAYROLL_INVALID_REQUESTED_AMT\""
              },
              "value": "PAYROLL_INVALID_REQUESTED_AMT"
            },
            "visibility": "private"
          },
          {
            "canonicalName": "Payroll.PaymentType",
            "id": 134,
            "members": [
              {
                "id": 131,
                "name": "Payroll",
                "nodeType": "EnumValue",
                "src": "4607:7:0"
              },
              {
                "id": 132,
                "name": "Reimbursement",
                "nodeType": "EnumValue",
                "src": "4616:13:0"
              },
              {
                "id": 133,
                "name": "Bonus",
                "nodeType": "EnumValue",
                "src": "4631:5:0"
              }
            ],
            "name": "PaymentType",
            "nodeType": "EnumDefinition",
            "src": "4588:50:0"
          },
          {
            "canonicalName": "Payroll.Employee",
            "id": 156,
            "members": [
              {
                "constant": false,
                "id": 136,
                "name": "accountAddress",
                "nodeType": "VariableDeclaration",
                "scope": 156,
                "src": "4670:22:0",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 135,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "4670:7:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 138,
                "name": "denominationTokenSalary",
                "nodeType": "VariableDeclaration",
                "scope": 156,
                "src": "4742:31:0",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 137,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "4742:7:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 140,
                "name": "accruedSalary",
                "nodeType": "VariableDeclaration",
                "scope": 156,
                "src": "4826:21:0",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 139,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "4826:7:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 142,
                "name": "bonus",
                "nodeType": "VariableDeclaration",
                "scope": 156,
                "src": "4925:13:0",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 141,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "4925:7:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 144,
                "name": "reimbursements",
                "nodeType": "VariableDeclaration",
                "scope": 156,
                "src": "4948:22:0",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 143,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "4948:7:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 146,
                "name": "lastPayroll",
                "nodeType": "VariableDeclaration",
                "scope": 156,
                "src": "4980:18:0",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint64",
                  "typeString": "uint64"
                },
                "typeName": {
                  "id": 145,
                  "name": "uint64",
                  "nodeType": "ElementaryTypeName",
                  "src": "4980:6:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 148,
                "name": "endDate",
                "nodeType": "VariableDeclaration",
                "scope": 156,
                "src": "5008:14:0",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint64",
                  "typeString": "uint64"
                },
                "typeName": {
                  "id": 147,
                  "name": "uint64",
                  "nodeType": "ElementaryTypeName",
                  "src": "5008:6:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 151,
                "name": "allocationTokenAddresses",
                "nodeType": "VariableDeclaration",
                "scope": 156,
                "src": "5032:34:0",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                  "typeString": "address[]"
                },
                "typeName": {
                  "baseType": {
                    "id": 149,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5032:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 150,
                  "length": null,
                  "nodeType": "ArrayTypeName",
                  "src": "5032:9:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                    "typeString": "address[]"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 155,
                "name": "allocationTokens",
                "nodeType": "VariableDeclaration",
                "scope": 156,
                "src": "5076:44:0",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                  "typeString": "mapping(address => uint256)"
                },
                "typeName": {
                  "id": 154,
                  "keyType": {
                    "id": 152,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5084:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "Mapping",
                  "src": "5076:27:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                    "typeString": "mapping(address => uint256)"
                  },
                  "valueType": {
                    "id": 153,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5095:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "Employee",
            "nodeType": "StructDefinition",
            "scope": 1984,
            "src": "4644:483:0",
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 158,
            "name": "finance",
            "nodeType": "VariableDeclaration",
            "scope": 1984,
            "src": "5133:22:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_Finance_$5528",
              "typeString": "contract Finance"
            },
            "typeName": {
              "contractScope": null,
              "id": 157,
              "name": "Finance",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 5528,
              "src": "5133:7:0",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Finance_$5528",
                "typeString": "contract Finance"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 160,
            "name": "denominationToken",
            "nodeType": "VariableDeclaration",
            "scope": 1984,
            "src": "5161:32:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 159,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "5161:7:0",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 162,
            "name": "feed",
            "nodeType": "VariableDeclaration",
            "scope": 1984,
            "src": "5199:17:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_IFeed_$14313",
              "typeString": "contract IFeed"
            },
            "typeName": {
              "contractScope": null,
              "id": 161,
              "name": "IFeed",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 14313,
              "src": "5199:5:0",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IFeed_$14313",
                "typeString": "contract IFeed"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 164,
            "name": "rateExpiryTime",
            "nodeType": "VariableDeclaration",
            "scope": 1984,
            "src": "5222:28:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint64",
              "typeString": "uint64"
            },
            "typeName": {
              "id": 163,
              "name": "uint64",
              "nodeType": "ElementaryTypeName",
              "src": "5222:6:0",
              "typeDescriptions": {
                "typeIdentifier": "t_uint64",
                "typeString": "uint64"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 166,
            "name": "nextEmployee",
            "nodeType": "VariableDeclaration",
            "scope": 1984,
            "src": "5360:27:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 165,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "5360:7:0",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 170,
            "name": "employees",
            "nodeType": "VariableDeclaration",
            "scope": 1984,
            "src": "5393:47:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Employee_$156_storage_$",
              "typeString": "mapping(uint256 => struct Payroll.Employee)"
            },
            "typeName": {
              "id": 169,
              "keyType": {
                "id": 167,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "5401:7:0",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              },
              "nodeType": "Mapping",
              "src": "5393:28:0",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Employee_$156_storage_$",
                "typeString": "mapping(uint256 => struct Payroll.Employee)"
              },
              "valueType": {
                "contractScope": null,
                "id": 168,
                "name": "Employee",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 156,
                "src": "5412:8:0",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                  "typeString": "struct Payroll.Employee"
                }
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 174,
            "name": "employeeIds",
            "nodeType": "VariableDeclaration",
            "scope": 1984,
            "src": "5477:48:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
              "typeString": "mapping(address => uint256)"
            },
            "typeName": {
              "id": 173,
              "keyType": {
                "id": 171,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "5485:7:0",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "5477:27:0",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                "typeString": "mapping(address => uint256)"
              },
              "valueType": {
                "id": 172,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "5496:7:0",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 178,
            "name": "allowedTokens",
            "nodeType": "VariableDeclaration",
            "scope": 1984,
            "src": "5570:47:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
              "typeString": "mapping(address => bool)"
            },
            "typeName": {
              "id": 177,
              "keyType": {
                "id": 175,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "5578:7:0",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "5570:24:0",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                "typeString": "mapping(address => bool)"
              },
              "valueType": {
                "id": 176,
                "name": "bool",
                "nodeType": "ElementaryTypeName",
                "src": "5589:4:0",
                "typeDescriptions": {
                  "typeIdentifier": "t_bool",
                  "typeString": "bool"
                }
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 190,
            "name": "AddEmployee",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 189,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 180,
                  "indexed": true,
                  "name": "employeeId",
                  "nodeType": "VariableDeclaration",
                  "scope": 190,
                  "src": "5651:26:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 179,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5651:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 182,
                  "indexed": true,
                  "name": "accountAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 190,
                  "src": "5687:30:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 181,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5687:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 184,
                  "indexed": false,
                  "name": "initialDenominationSalary",
                  "nodeType": "VariableDeclaration",
                  "scope": 190,
                  "src": "5727:33:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 183,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5727:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 186,
                  "indexed": false,
                  "name": "startDate",
                  "nodeType": "VariableDeclaration",
                  "scope": 190,
                  "src": "5770:16:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 185,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "5770:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 188,
                  "indexed": false,
                  "name": "role",
                  "nodeType": "VariableDeclaration",
                  "scope": 190,
                  "src": "5796:11:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 187,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "5796:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5641:172:0"
            },
            "src": "5624:190:0"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 196,
            "name": "TerminateEmployee",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 195,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 192,
                  "indexed": true,
                  "name": "employeeId",
                  "nodeType": "VariableDeclaration",
                  "scope": 196,
                  "src": "5843:26:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 191,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5843:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 194,
                  "indexed": false,
                  "name": "endDate",
                  "nodeType": "VariableDeclaration",
                  "scope": 196,
                  "src": "5871:14:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 193,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "5871:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5842:44:0"
            },
            "src": "5819:68:0"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 202,
            "name": "SetEmployeeSalary",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 201,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 198,
                  "indexed": true,
                  "name": "employeeId",
                  "nodeType": "VariableDeclaration",
                  "scope": 202,
                  "src": "5916:26:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 197,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5916:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 200,
                  "indexed": false,
                  "name": "denominationSalary",
                  "nodeType": "VariableDeclaration",
                  "scope": 202,
                  "src": "5944:26:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 199,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5944:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5915:56:0"
            },
            "src": "5892:80:0"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 208,
            "name": "AddEmployeeAccruedSalary",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 207,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 204,
                  "indexed": true,
                  "name": "employeeId",
                  "nodeType": "VariableDeclaration",
                  "scope": 208,
                  "src": "6008:26:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 203,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6008:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 206,
                  "indexed": false,
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 208,
                  "src": "6036:14:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 205,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6036:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6007:44:0"
            },
            "src": "5977:75:0"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 214,
            "name": "AddEmployeeBonus",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 213,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 210,
                  "indexed": true,
                  "name": "employeeId",
                  "nodeType": "VariableDeclaration",
                  "scope": 214,
                  "src": "6080:26:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 209,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6080:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 212,
                  "indexed": false,
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 214,
                  "src": "6108:14:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 211,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6108:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6079:44:0"
            },
            "src": "6057:67:0"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 220,
            "name": "AddEmployeeReimbursement",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 219,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 216,
                  "indexed": true,
                  "name": "employeeId",
                  "nodeType": "VariableDeclaration",
                  "scope": 220,
                  "src": "6160:26:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 215,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6160:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 218,
                  "indexed": false,
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 220,
                  "src": "6188:14:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 217,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6188:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6159:44:0"
            },
            "src": "6129:75:0"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 228,
            "name": "ChangeAddressByEmployee",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 227,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 222,
                  "indexed": true,
                  "name": "employeeId",
                  "nodeType": "VariableDeclaration",
                  "scope": 228,
                  "src": "6239:26:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 221,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6239:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 224,
                  "indexed": true,
                  "name": "newAccountAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 228,
                  "src": "6267:33:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 223,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6267:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 226,
                  "indexed": true,
                  "name": "oldAccountAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 228,
                  "src": "6302:33:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 225,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6302:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6238:98:0"
            },
            "src": "6209:128:0"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 232,
            "name": "DetermineAllocation",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 231,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 230,
                  "indexed": true,
                  "name": "employeeId",
                  "nodeType": "VariableDeclaration",
                  "scope": 232,
                  "src": "6368:26:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 229,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6368:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6367:28:0"
            },
            "src": "6342:54:0"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 246,
            "name": "SendPayment",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 245,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 234,
                  "indexed": true,
                  "name": "employeeId",
                  "nodeType": "VariableDeclaration",
                  "scope": 246,
                  "src": "6428:26:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 233,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6428:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 236,
                  "indexed": true,
                  "name": "accountAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 246,
                  "src": "6464:30:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 235,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6464:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 238,
                  "indexed": true,
                  "name": "token",
                  "nodeType": "VariableDeclaration",
                  "scope": 246,
                  "src": "6504:21:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 237,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6504:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 240,
                  "indexed": false,
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 246,
                  "src": "6535:14:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 239,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6535:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 242,
                  "indexed": false,
                  "name": "exchangeRate",
                  "nodeType": "VariableDeclaration",
                  "scope": 246,
                  "src": "6559:20:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 241,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6559:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 244,
                  "indexed": false,
                  "name": "paymentReference",
                  "nodeType": "VariableDeclaration",
                  "scope": 246,
                  "src": "6589:23:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 243,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "6589:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6418:200:0"
            },
            "src": "6401:218:0"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 252,
            "name": "SetAllowedToken",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 251,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 248,
                  "indexed": true,
                  "name": "token",
                  "nodeType": "VariableDeclaration",
                  "scope": 252,
                  "src": "6646:21:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 247,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6646:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 250,
                  "indexed": false,
                  "name": "allowed",
                  "nodeType": "VariableDeclaration",
                  "scope": 252,
                  "src": "6669:12:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 249,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "6669:4:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6645:37:0"
            },
            "src": "6624:59:0"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 256,
            "name": "SetPriceFeed",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 255,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 254,
                  "indexed": true,
                  "name": "feed",
                  "nodeType": "VariableDeclaration",
                  "scope": 256,
                  "src": "6707:20:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 253,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6707:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6706:22:0"
            },
            "src": "6688:41:0"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 260,
            "name": "SetRateExpiryTime",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 259,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 258,
                  "indexed": false,
                  "name": "time",
                  "nodeType": "VariableDeclaration",
                  "scope": 260,
                  "src": "6758:11:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 257,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "6758:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6757:13:0"
            },
            "src": "6734:37:0"
          },
          {
            "body": {
              "id": 272,
              "nodeType": "Block",
              "src": "6859:94:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 266,
                            "name": "_employeeId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 262,
                            "src": "6893:11:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 265,
                          "name": "_employeeExists",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1675,
                          "src": "6877:15:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_bool_$",
                            "typeString": "function (uint256) view returns (bool)"
                          }
                        },
                        "id": 267,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "6877:28:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 268,
                        "name": "ERROR_EMPLOYEE_DOESNT_EXIST",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 70,
                        "src": "6907:27:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 264,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        15156,
                        15157
                      ],
                      "referencedDeclaration": 15157,
                      "src": "6869:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 269,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6869:66:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 270,
                  "nodeType": "ExpressionStatement",
                  "src": "6869:66:0"
                },
                {
                  "id": 271,
                  "nodeType": "PlaceholderStatement",
                  "src": "6945:1:0"
                }
              ]
            },
            "documentation": null,
            "id": 273,
            "name": "employeeIdExists",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 263,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 262,
                  "name": "_employeeId",
                  "nodeType": "VariableDeclaration",
                  "scope": 273,
                  "src": "6838:19:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 261,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6838:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6837:21:0"
            },
            "src": "6812:141:0",
            "visibility": "internal"
          },
          {
            "body": {
              "id": 285,
              "nodeType": "Block",
              "src": "7053:199:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 279,
                            "name": "_employeeId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 275,
                            "src": "7194:11:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 278,
                          "name": "_isEmployeeIdActive",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1763,
                          "src": "7174:19:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_bool_$",
                            "typeString": "function (uint256) view returns (bool)"
                          }
                        },
                        "id": 280,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "7174:32:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 281,
                        "name": "ERROR_NON_ACTIVE_EMPLOYEE",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 73,
                        "src": "7208:25:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 277,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        15156,
                        15157
                      ],
                      "referencedDeclaration": 15157,
                      "src": "7166:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 282,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7166:68:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 283,
                  "nodeType": "ExpressionStatement",
                  "src": "7166:68:0"
                },
                {
                  "id": 284,
                  "nodeType": "PlaceholderStatement",
                  "src": "7244:1:0"
                }
              ]
            },
            "documentation": null,
            "id": 286,
            "name": "employeeActive",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 276,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 275,
                  "name": "_employeeId",
                  "nodeType": "VariableDeclaration",
                  "scope": 286,
                  "src": "7032:19:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 274,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7032:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7031:21:0"
            },
            "src": "7008:244:0",
            "visibility": "internal"
          },
          {
            "body": {
              "id": 303,
              "nodeType": "Block",
              "src": "7332:129:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 298,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 289,
                              "name": "employees",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 170,
                              "src": "7350:9:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Employee_$156_storage_$",
                                "typeString": "mapping(uint256 => struct Payroll.Employee storage ref)"
                              }
                            },
                            "id": 294,
                            "indexExpression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 290,
                                "name": "employeeIds",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 174,
                                "src": "7360:11:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                  "typeString": "mapping(address => uint256)"
                                }
                              },
                              "id": 293,
                              "indexExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 291,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 15153,
                                  "src": "7372:3:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 292,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sender",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "7372:10:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "7360:23:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "7350:34:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Employee_$156_storage",
                              "typeString": "struct Payroll.Employee storage ref"
                            }
                          },
                          "id": 295,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "accountAddress",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 136,
                          "src": "7350:49:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 296,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 15153,
                            "src": "7403:3:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 297,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "7403:10:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "7350:63:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 299,
                        "name": "ERROR_SENDER_DOES_NOT_MATCH",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 76,
                        "src": "7415:27:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 288,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        15156,
                        15157
                      ],
                      "referencedDeclaration": 15157,
                      "src": "7342:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 300,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7342:101:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 301,
                  "nodeType": "ExpressionStatement",
                  "src": "7342:101:0"
                },
                {
                  "id": 302,
                  "nodeType": "PlaceholderStatement",
                  "src": "7453:1:0"
                }
              ]
            },
            "documentation": null,
            "id": 304,
            "name": "employeeMatches",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 287,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7332:0:0"
            },
            "src": "7307:154:0",
            "visibility": "internal"
          },
          {
            "body": {
              "id": 347,
              "nodeType": "Block",
              "src": "8338:389:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 317,
                      "name": "initialized",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10795,
                      "src": "8348:11:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 318,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8348:13:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 319,
                  "nodeType": "ExpressionStatement",
                  "src": "8348:13:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 322,
                            "name": "_finance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 306,
                            "src": "8391:8:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_Finance_$5528",
                              "typeString": "contract Finance"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_Finance_$5528",
                              "typeString": "contract Finance"
                            }
                          ],
                          "id": 321,
                          "name": "isContract",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10837,
                          "src": "8380:10:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                            "typeString": "function (address) view returns (bool)"
                          }
                        },
                        "id": 323,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "8380:20:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 324,
                        "name": "ERROR_FINANCE_NOT_CONTRACT",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 79,
                        "src": "8402:26:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 320,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        15156,
                        15157
                      ],
                      "referencedDeclaration": 15157,
                      "src": "8372:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 325,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8372:57:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 326,
                  "nodeType": "ExpressionStatement",
                  "src": "8372:57:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 329,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 327,
                      "name": "finance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 158,
                      "src": "8439:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_Finance_$5528",
                        "typeString": "contract Finance"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 328,
                      "name": "_finance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 306,
                      "src": "8449:8:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_Finance_$5528",
                        "typeString": "contract Finance"
                      }
                    },
                    "src": "8439:18:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Finance_$5528",
                      "typeString": "contract Finance"
                    }
                  },
                  "id": 330,
                  "nodeType": "ExpressionStatement",
                  "src": "8439:18:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 333,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 331,
                      "name": "denominationToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 160,
                      "src": "8468:17:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 332,
                      "name": "_denominationToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 308,
                      "src": "8488:18:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "8468:38:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 334,
                  "nodeType": "ExpressionStatement",
                  "src": "8468:38:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 336,
                        "name": "_priceFeed",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 310,
                        "src": "8530:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IFeed_$14313",
                          "typeString": "contract IFeed"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IFeed_$14313",
                          "typeString": "contract IFeed"
                        }
                      ],
                      "id": 335,
                      "name": "_setPriceFeed",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1121,
                      "src": "8516:13:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IFeed_$14313_$returns$__$",
                        "typeString": "function (contract IFeed)"
                      }
                    },
                    "id": 337,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8516:25:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 338,
                  "nodeType": "ExpressionStatement",
                  "src": "8516:25:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 340,
                        "name": "_rateExpiryTime",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 312,
                        "src": "8570:15:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      ],
                      "id": 339,
                      "name": "_setRateExpiryTime",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1142,
                      "src": "8551:18:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint64_$returns$__$",
                        "typeString": "function (uint64)"
                      }
                    },
                    "id": 341,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8551:35:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 342,
                  "nodeType": "ExpressionStatement",
                  "src": "8551:35:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 345,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 343,
                      "name": "nextEmployee",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 166,
                      "src": "8704:12:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "31",
                      "id": 344,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "8719:1:0",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "src": "8704:16:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 346,
                  "nodeType": "ExpressionStatement",
                  "src": "8704:16:0"
                }
              ]
            },
            "documentation": "@notice Initialize Payroll app for Finance at `_finance` and price feed at `_priceFeed`, setting denomination token to `_token` and exchange rate expiry time to `@transformTime(_rateExpiryTime)`\n@dev Note that we do not require _denominationToken to be a contract, as it may be a \"fake\"\n     address used by the price feed to denominate fiat currencies\n@param _finance Address of the Finance app this Payroll app will rely on for payments (non-changeable)\n@param _denominationToken Address of the denomination token used for salary accounting\n@param _priceFeed Address of the price feed\n@param _rateExpiryTime Acceptable expiry time in seconds for the price feed's exchange rates",
            "id": 348,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 315,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 314,
                  "name": "onlyInit",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 10742,
                  "src": "8329:8:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "8329:8:0"
              }
            ],
            "name": "initialize",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 313,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 306,
                  "name": "_finance",
                  "nodeType": "VariableDeclaration",
                  "scope": 348,
                  "src": "8232:16:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_Finance_$5528",
                    "typeString": "contract Finance"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 305,
                    "name": "Finance",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 5528,
                    "src": "8232:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Finance_$5528",
                      "typeString": "contract Finance"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 308,
                  "name": "_denominationToken",
                  "nodeType": "VariableDeclaration",
                  "scope": 348,
                  "src": "8250:26:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 307,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8250:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 310,
                  "name": "_priceFeed",
                  "nodeType": "VariableDeclaration",
                  "scope": 348,
                  "src": "8278:16:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IFeed_$14313",
                    "typeString": "contract IFeed"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 309,
                    "name": "IFeed",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 14313,
                    "src": "8278:5:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IFeed_$14313",
                      "typeString": "contract IFeed"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 312,
                  "name": "_rateExpiryTime",
                  "nodeType": "VariableDeclaration",
                  "scope": 348,
                  "src": "8296:22:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 311,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "8296:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8231:88:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 316,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8338:0:0"
            },
            "scope": 1984,
            "src": "8212:515:0",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 381,
              "nodeType": "Block",
              "src": "9199:174:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 366,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 362,
                            "name": "allowedTokens",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 178,
                            "src": "9217:13:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                              "typeString": "mapping(address => bool)"
                            }
                          },
                          "id": 364,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 363,
                            "name": "_token",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 350,
                            "src": "9231:6:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "9217:21:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 365,
                          "name": "_allowed",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 352,
                          "src": "9242:8:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "9217:33:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 367,
                        "name": "ERROR_TOKEN_ALREADY_SET",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 82,
                        "src": "9252:23:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 361,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        15156,
                        15157
                      ],
                      "referencedDeclaration": 15157,
                      "src": "9209:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 368,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9209:67:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 369,
                  "nodeType": "ExpressionStatement",
                  "src": "9209:67:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 374,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 370,
                        "name": "allowedTokens",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 178,
                        "src": "9286:13:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                          "typeString": "mapping(address => bool)"
                        }
                      },
                      "id": 372,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 371,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 350,
                        "src": "9300:6:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "9286:21:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 373,
                      "name": "_allowed",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 352,
                      "src": "9310:8:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "9286:32:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 375,
                  "nodeType": "ExpressionStatement",
                  "src": "9286:32:0"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 377,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 350,
                        "src": "9349:6:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 378,
                        "name": "_allowed",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 352,
                        "src": "9357:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 376,
                      "name": "SetAllowedToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 252,
                      "src": "9333:15:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_bool_$returns$__$",
                        "typeString": "function (address,bool)"
                      }
                    },
                    "id": 379,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9333:33:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 380,
                  "nodeType": "EmitStatement",
                  "src": "9328:38:0"
                }
              ]
            },
            "documentation": "@notice `_allowed ? 'Add' : 'Remove'` `_token.symbol(): string` `_allowed ? 'to' : 'from'` the set of allowed tokens\n@param _token Address of the token to be added or removed from the list of allowed tokens for payments\n@param _allowed Boolean to tell whether the given token should be added or removed from the list",
            "id": 382,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 355,
                    "name": "MANAGE_ALLOWED_TOKENS_ROLE",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 41,
                    "src": "9158:26:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 357,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 350,
                        "src": "9190:6:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 356,
                      "name": "arr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        9167,
                        9182,
                        9202,
                        9217,
                        9237,
                        9258,
                        9282,
                        9302,
                        9331,
                        9356,
                        9381,
                        9404,
                        9435,
                        9474,
                        9521,
                        9576
                      ],
                      "referencedDeclaration": 9217,
                      "src": "9186:3:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_address_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$",
                        "typeString": "function (address) pure returns (uint256[] memory)"
                      }
                    },
                    "id": 358,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9186:11:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                      "typeString": "uint256[] memory"
                    }
                  }
                ],
                "id": 359,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 354,
                  "name": "authP",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 10428,
                  "src": "9152:5:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$_t_array$_t_uint256_$dyn_memory_ptr_$",
                    "typeString": "modifier (bytes32,uint256[] memory)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "9152:46:0"
              }
            ],
            "name": "setAllowedToken",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 353,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 350,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 382,
                  "src": "9112:14:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 349,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "9112:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 352,
                  "name": "_allowed",
                  "nodeType": "VariableDeclaration",
                  "scope": 382,
                  "src": "9128:13:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 351,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "9128:4:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9111:31:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 360,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "9199:0:0"
            },
            "scope": 1984,
            "src": "9087:286:0",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 398,
              "nodeType": "Block",
              "src": "9610:37:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 395,
                        "name": "_feed",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 384,
                        "src": "9634:5:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IFeed_$14313",
                          "typeString": "contract IFeed"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IFeed_$14313",
                          "typeString": "contract IFeed"
                        }
                      ],
                      "id": 394,
                      "name": "_setPriceFeed",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1121,
                      "src": "9620:13:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IFeed_$14313_$returns$__$",
                        "typeString": "function (contract IFeed)"
                      }
                    },
                    "id": 396,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9620:20:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 397,
                  "nodeType": "ExpressionStatement",
                  "src": "9620:20:0"
                }
              ]
            },
            "documentation": "@notice Set the price feed for exchange rates to `_feed`\n@param _feed Address of the new price feed instance",
            "id": 399,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 387,
                    "name": "MODIFY_PRICE_FEED_ROLE",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 44,
                    "src": "9568:22:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 389,
                        "name": "_feed",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 384,
                        "src": "9596:5:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IFeed_$14313",
                          "typeString": "contract IFeed"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 390,
                        "name": "feed",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 162,
                        "src": "9603:4:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IFeed_$14313",
                          "typeString": "contract IFeed"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IFeed_$14313",
                          "typeString": "contract IFeed"
                        },
                        {
                          "typeIdentifier": "t_contract$_IFeed_$14313",
                          "typeString": "contract IFeed"
                        }
                      ],
                      "id": 388,
                      "name": "arr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        9167,
                        9182,
                        9202,
                        9217,
                        9237,
                        9258,
                        9282,
                        9302,
                        9331,
                        9356,
                        9381,
                        9404,
                        9435,
                        9474,
                        9521,
                        9576
                      ],
                      "referencedDeclaration": 9237,
                      "src": "9592:3:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_address_$_t_address_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$",
                        "typeString": "function (address,address) pure returns (uint256[] memory)"
                      }
                    },
                    "id": 391,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9592:16:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                      "typeString": "uint256[] memory"
                    }
                  }
                ],
                "id": 392,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 386,
                  "name": "authP",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 10428,
                  "src": "9562:5:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$_t_array$_t_uint256_$dyn_memory_ptr_$",
                    "typeString": "modifier (bytes32,uint256[] memory)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "9562:47:0"
              }
            ],
            "name": "setPriceFeed",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 385,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 384,
                  "name": "_feed",
                  "nodeType": "VariableDeclaration",
                  "scope": 399,
                  "src": "9540:11:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IFeed_$14313",
                    "typeString": "contract IFeed"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 383,
                    "name": "IFeed",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 14313,
                    "src": "9540:5:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IFeed_$14313",
                      "typeString": "contract IFeed"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9539:13:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 393,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "9610:0:0"
            },
            "scope": 1984,
            "src": "9518:129:0",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 419,
              "nodeType": "Block",
              "src": "10093:42:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 416,
                        "name": "_time",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 401,
                        "src": "10122:5:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      ],
                      "id": 415,
                      "name": "_setRateExpiryTime",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1142,
                      "src": "10103:18:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint64_$returns$__$",
                        "typeString": "function (uint64)"
                      }
                    },
                    "id": 417,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10103:25:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 418,
                  "nodeType": "ExpressionStatement",
                  "src": "10103:25:0"
                }
              ]
            },
            "documentation": "@notice Set the acceptable expiry time for the price feed's exchange rates to `@transformTime(_time)`\n@dev Exchange rates older than the given value won't be accepted for payments and will cause payouts to revert\n@param _time The expiration time in seconds for exchange rates",
            "id": 420,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 404,
                    "name": "MODIFY_RATE_EXPIRY_ROLE",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 47,
                    "src": "10022:23:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 407,
                            "name": "_time",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 401,
                            "src": "10059:5:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          ],
                          "id": 406,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "10051:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          },
                          "typeName": "uint256"
                        },
                        "id": 408,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "10051:14:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 410,
                            "name": "rateExpiryTime",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 164,
                            "src": "10075:14:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          ],
                          "id": 409,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "10067:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          },
                          "typeName": "uint256"
                        },
                        "id": 411,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "10067:23:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 405,
                      "name": "arr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        9167,
                        9182,
                        9202,
                        9217,
                        9237,
                        9258,
                        9282,
                        9302,
                        9331,
                        9356,
                        9381,
                        9404,
                        9435,
                        9474,
                        9521,
                        9576
                      ],
                      "referencedDeclaration": 9435,
                      "src": "10047:3:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256[] memory)"
                      }
                    },
                    "id": 412,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10047:44:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                      "typeString": "uint256[] memory"
                    }
                  }
                ],
                "id": 413,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 403,
                  "name": "authP",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 10428,
                  "src": "10016:5:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$_t_array$_t_uint256_$dyn_memory_ptr_$",
                    "typeString": "modifier (bytes32,uint256[] memory)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "10016:76:0"
              }
            ],
            "name": "setRateExpiryTime",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 402,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 401,
                  "name": "_time",
                  "nodeType": "VariableDeclaration",
                  "scope": 420,
                  "src": "9993:12:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 400,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "9993:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9992:14:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 414,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "10093:0:0"
            },
            "scope": 1984,
            "src": "9966:169:0",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 448,
              "nodeType": "Block",
              "src": "10878:93:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 442,
                        "name": "_accountAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 422,
                        "src": "10901:15:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 443,
                        "name": "_initialDenominationSalary",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 424,
                        "src": "10918:26:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 444,
                        "name": "_startDate",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 426,
                        "src": "10946:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 445,
                        "name": "_role",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 428,
                        "src": "10958:5:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_calldata_ptr",
                          "typeString": "string calldata"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        },
                        {
                          "typeIdentifier": "t_string_calldata_ptr",
                          "typeString": "string calldata"
                        }
                      ],
                      "id": 441,
                      "name": "_addEmployee",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1196,
                      "src": "10888:12:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_uint64_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (address,uint256,uint64,string memory)"
                      }
                    },
                    "id": 446,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10888:76:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 447,
                  "nodeType": "ExpressionStatement",
                  "src": "10888:76:0"
                }
              ]
            },
            "documentation": "@notice Add employee with address `_accountAddress` to payroll with an salary of `_initialDenominationSalary` per second, starting on `@formatDate(_startDate)`\n@param _accountAddress Employee's address to receive payroll\n@param _initialDenominationSalary Employee's salary, per second in denomination token\n@param _startDate Employee's starting timestamp in seconds (it actually sets their initial lastPayroll value)\n@param _role Employee's role",
            "id": 449,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 431,
                    "name": "ADD_EMPLOYEE_ROLE",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 26,
                    "src": "10784:17:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 433,
                        "name": "_accountAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 422,
                        "src": "10807:15:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 434,
                        "name": "_initialDenominationSalary",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 424,
                        "src": "10824:26:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 436,
                            "name": "_startDate",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 426,
                            "src": "10860:10:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          ],
                          "id": 435,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "10852:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          },
                          "typeName": "uint256"
                        },
                        "id": 437,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "10852:19:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 432,
                      "name": "arr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        9167,
                        9182,
                        9202,
                        9217,
                        9237,
                        9258,
                        9282,
                        9302,
                        9331,
                        9356,
                        9381,
                        9404,
                        9435,
                        9474,
                        9521,
                        9576
                      ],
                      "referencedDeclaration": 9258,
                      "src": "10803:3:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_address_$_t_uint256_$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$",
                        "typeString": "function (address,uint256,uint256) pure returns (uint256[] memory)"
                      }
                    },
                    "id": 438,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10803:69:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                      "typeString": "uint256[] memory"
                    }
                  }
                ],
                "id": 439,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 430,
                  "name": "authP",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 10428,
                  "src": "10778:5:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$_t_array$_t_uint256_$dyn_memory_ptr_$",
                    "typeString": "modifier (bytes32,uint256[] memory)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "10778:95:0"
              }
            ],
            "name": "addEmployee",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 429,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 422,
                  "name": "_accountAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 449,
                  "src": "10659:23:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 421,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "10659:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 424,
                  "name": "_initialDenominationSalary",
                  "nodeType": "VariableDeclaration",
                  "scope": 449,
                  "src": "10684:34:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 423,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "10684:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 426,
                  "name": "_startDate",
                  "nodeType": "VariableDeclaration",
                  "scope": 449,
                  "src": "10720:17:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 425,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "10720:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 428,
                  "name": "_role",
                  "nodeType": "VariableDeclaration",
                  "scope": 449,
                  "src": "10739:12:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_calldata_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 427,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "10739:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10658:94:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 440,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "10878:0:0"
            },
            "scope": 1984,
            "src": "10638:333:0",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 471,
              "nodeType": "Block",
              "src": "11366:48:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 467,
                        "name": "_employeeId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 451,
                        "src": "11386:11:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 468,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 453,
                        "src": "11399:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 466,
                      "name": "_addBonus",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1225,
                      "src": "11376:9:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (uint256,uint256)"
                      }
                    },
                    "id": 469,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11376:31:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 470,
                  "nodeType": "ExpressionStatement",
                  "src": "11376:31:0"
                }
              ]
            },
            "documentation": "@notice Add `_amount` to bonus for employee #`_employeeId`\n@param _employeeId Employee's identifier\n@param _amount Amount to be added to the employee's bonuses in denomination token",
            "id": 472,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 456,
                    "name": "ADD_BONUS_ROLE",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 35,
                    "src": "11283:14:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 458,
                        "name": "_employeeId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 451,
                        "src": "11303:11:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 459,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 453,
                        "src": "11316:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 457,
                      "name": "arr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        9167,
                        9182,
                        9202,
                        9217,
                        9237,
                        9258,
                        9282,
                        9302,
                        9331,
                        9356,
                        9381,
                        9404,
                        9435,
                        9474,
                        9521,
                        9576
                      ],
                      "referencedDeclaration": 9435,
                      "src": "11299:3:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256[] memory)"
                      }
                    },
                    "id": 460,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11299:25:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                      "typeString": "uint256[] memory"
                    }
                  }
                ],
                "id": 461,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 455,
                  "name": "authP",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 10428,
                  "src": "11277:5:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$_t_array$_t_uint256_$dyn_memory_ptr_$",
                    "typeString": "modifier (bytes32,uint256[] memory)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "11277:48:0"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 463,
                    "name": "_employeeId",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 451,
                    "src": "11349:11:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                ],
                "id": 464,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 462,
                  "name": "employeeActive",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 286,
                  "src": "11334:14:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_uint256_$",
                    "typeString": "modifier (uint256)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "11334:27:0"
              }
            ],
            "name": "addBonus",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 454,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 451,
                  "name": "_employeeId",
                  "nodeType": "VariableDeclaration",
                  "scope": 472,
                  "src": "11214:19:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 450,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "11214:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 453,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 472,
                  "src": "11235:15:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 452,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "11235:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11213:38:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 465,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "11366:0:0"
            },
            "scope": 1984,
            "src": "11196:218:0",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 494,
              "nodeType": "Block",
              "src": "11841:56:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 490,
                        "name": "_employeeId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 474,
                        "src": "11869:11:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 491,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 476,
                        "src": "11882:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 489,
                      "name": "_addReimbursement",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1254,
                      "src": "11851:17:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (uint256,uint256)"
                      }
                    },
                    "id": 492,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11851:39:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 493,
                  "nodeType": "ExpressionStatement",
                  "src": "11851:39:0"
                }
              ]
            },
            "documentation": "@notice Add `_amount` to reimbursements for employee #`_employeeId`\n@param _employeeId Employee's identifier\n@param _amount Amount to be added to the employee's reimbursements in denomination token",
            "id": 495,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 479,
                    "name": "ADD_REIMBURSEMENT_ROLE",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 38,
                    "src": "11750:22:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 481,
                        "name": "_employeeId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 474,
                        "src": "11778:11:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 482,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 476,
                        "src": "11791:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 480,
                      "name": "arr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        9167,
                        9182,
                        9202,
                        9217,
                        9237,
                        9258,
                        9282,
                        9302,
                        9331,
                        9356,
                        9381,
                        9404,
                        9435,
                        9474,
                        9521,
                        9576
                      ],
                      "referencedDeclaration": 9435,
                      "src": "11774:3:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256[] memory)"
                      }
                    },
                    "id": 483,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11774:25:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                      "typeString": "uint256[] memory"
                    }
                  }
                ],
                "id": 484,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 478,
                  "name": "authP",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 10428,
                  "src": "11744:5:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$_t_array$_t_uint256_$dyn_memory_ptr_$",
                    "typeString": "modifier (bytes32,uint256[] memory)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "11744:56:0"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 486,
                    "name": "_employeeId",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 474,
                    "src": "11824:11:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                ],
                "id": 487,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 485,
                  "name": "employeeActive",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 286,
                  "src": "11809:14:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_uint256_$",
                    "typeString": "modifier (uint256)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "11809:27:0"
              }
            ],
            "name": "addReimbursement",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 477,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 474,
                  "name": "_employeeId",
                  "nodeType": "VariableDeclaration",
                  "scope": 495,
                  "src": "11681:19:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 473,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "11681:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 476,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 495,
                  "src": "11702:15:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 475,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "11702:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11680:38:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 488,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "11841:0:0"
            },
            "scope": 1984,
            "src": "11655:242:0",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 552,
              "nodeType": "Block",
              "src": "12603:509:0",
              "statements": [
                {
                  "assignments": [
                    517
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 517,
                      "name": "employee",
                      "nodeType": "VariableDeclaration",
                      "scope": 553,
                      "src": "12613:25:0",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                        "typeString": "struct Payroll.Employee"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 516,
                        "name": "Employee",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 156,
                        "src": "12613:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                          "typeString": "struct Payroll.Employee"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 521,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 518,
                      "name": "employees",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 170,
                      "src": "12641:9:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Employee_$156_storage_$",
                        "typeString": "mapping(uint256 => struct Payroll.Employee storage ref)"
                      }
                    },
                    "id": 520,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 519,
                      "name": "_employeeId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 497,
                      "src": "12651:11:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "12641:22:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Employee_$156_storage",
                      "typeString": "struct Payroll.Employee storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "12613:50:0"
                },
                {
                  "assignments": [
                    523
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 523,
                      "name": "owed",
                      "nodeType": "VariableDeclaration",
                      "scope": 553,
                      "src": "12748:12:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 522,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "12748:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 528,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 525,
                        "name": "employee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 517,
                        "src": "12794:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                          "typeString": "struct Payroll.Employee storage pointer"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "66616c7365",
                        "id": 526,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "bool",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "12804:5:0",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "value": "false"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                          "typeString": "struct Payroll.Employee storage pointer"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 524,
                      "name": "_getOwedSalarySinceLastPayroll",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1849,
                      "src": "12763:30:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_Employee_$156_storage_ptr_$_t_bool_$returns$_t_uint256_$",
                        "typeString": "function (struct Payroll.Employee storage pointer,bool) view returns (uint256)"
                      }
                    },
                    "id": 527,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12763:47:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "12748:62:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 530,
                        "name": "_employeeId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 497,
                        "src": "12838:11:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 531,
                        "name": "owed",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 523,
                        "src": "12851:4:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 529,
                      "name": "_addAccruedSalary",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1283,
                      "src": "12820:17:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (uint256,uint256)"
                      }
                    },
                    "id": 532,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12820:36:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 533,
                  "nodeType": "ExpressionStatement",
                  "src": "12820:36:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 539,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 534,
                        "name": "employee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 517,
                        "src": "12935:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                          "typeString": "struct Payroll.Employee storage pointer"
                        }
                      },
                      "id": 536,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "lastPayroll",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 146,
                      "src": "12935:20:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 537,
                        "name": "getTimestamp64",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11199,
                        "src": "12958:14:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$__$returns$_t_uint64_$",
                          "typeString": "function () view returns (uint64)"
                        }
                      },
                      "id": 538,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "12958:16:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "12935:39:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 540,
                  "nodeType": "ExpressionStatement",
                  "src": "12935:39:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 545,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 541,
                        "name": "employee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 517,
                        "src": "12984:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                          "typeString": "struct Payroll.Employee storage pointer"
                        }
                      },
                      "id": 543,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "denominationTokenSalary",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 138,
                      "src": "12984:32:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 544,
                      "name": "_denominationSalary",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 499,
                      "src": "13019:19:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "12984:54:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 546,
                  "nodeType": "ExpressionStatement",
                  "src": "12984:54:0"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 548,
                        "name": "_employeeId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 497,
                        "src": "13072:11:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 549,
                        "name": "_denominationSalary",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 499,
                        "src": "13085:19:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 547,
                      "name": "SetEmployeeSalary",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 202,
                      "src": "13054:17:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (uint256,uint256)"
                      }
                    },
                    "id": 550,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13054:51:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 551,
                  "nodeType": "EmitStatement",
                  "src": "13049:56:0"
                }
              ]
            },
            "documentation": "@notice Set employee #`_employeeId`'s salary to `_denominationSalary` per second\n@dev This reverts if either the employee's owed salary or accrued salary overflows, to avoid\n     losing any accrued salary for an employee due to the employer changing their salary.\n@param _employeeId Employee's identifier\n@param _denominationSalary Employee's new salary, per second in denomination token",
            "id": 553,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 502,
                    "name": "SET_EMPLOYEE_SALARY_ROLE",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 32,
                    "src": "12450:24:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 504,
                        "name": "_employeeId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 497,
                        "src": "12480:11:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 505,
                        "name": "_denominationSalary",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 499,
                        "src": "12493:19:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 506,
                            "name": "employees",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 170,
                            "src": "12514:9:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Employee_$156_storage_$",
                              "typeString": "mapping(uint256 => struct Payroll.Employee storage ref)"
                            }
                          },
                          "id": 508,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 507,
                            "name": "_employeeId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 497,
                            "src": "12524:11:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "12514:22:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Employee_$156_storage",
                            "typeString": "struct Payroll.Employee storage ref"
                          }
                        },
                        "id": 509,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "denominationTokenSalary",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 138,
                        "src": "12514:46:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 503,
                      "name": "arr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        9167,
                        9182,
                        9202,
                        9217,
                        9237,
                        9258,
                        9282,
                        9302,
                        9331,
                        9356,
                        9381,
                        9404,
                        9435,
                        9474,
                        9521,
                        9576
                      ],
                      "referencedDeclaration": 9474,
                      "src": "12476:3:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$",
                        "typeString": "function (uint256,uint256,uint256) pure returns (uint256[] memory)"
                      }
                    },
                    "id": 510,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12476:85:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                      "typeString": "uint256[] memory"
                    }
                  }
                ],
                "id": 511,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 501,
                  "name": "authP",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 10428,
                  "src": "12444:5:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$_t_array$_t_uint256_$dyn_memory_ptr_$",
                    "typeString": "modifier (bytes32,uint256[] memory)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "12444:118:0"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 513,
                    "name": "_employeeId",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 497,
                    "src": "12586:11:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                ],
                "id": 514,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 512,
                  "name": "employeeActive",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 286,
                  "src": "12571:14:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_uint256_$",
                    "typeString": "modifier (uint256)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "12571:27:0"
              }
            ],
            "name": "setEmployeeSalary",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 500,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 497,
                  "name": "_employeeId",
                  "nodeType": "VariableDeclaration",
                  "scope": 553,
                  "src": "12369:19:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 496,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "12369:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 499,
                  "name": "_denominationSalary",
                  "nodeType": "VariableDeclaration",
                  "scope": 553,
                  "src": "12390:27:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 498,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "12390:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12368:50:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 515,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "12603:0:0"
            },
            "scope": 1984,
            "src": "12342:770:0",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 577,
              "nodeType": "Block",
              "src": "13512:58:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 573,
                        "name": "_employeeId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 555,
                        "src": "13541:11:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 574,
                        "name": "_endDate",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 557,
                        "src": "13554:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      ],
                      "id": 572,
                      "name": "_terminateEmployee",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1352,
                      "src": "13522:18:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_uint64_$returns$__$",
                        "typeString": "function (uint256,uint64)"
                      }
                    },
                    "id": 575,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13522:41:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 576,
                  "nodeType": "ExpressionStatement",
                  "src": "13522:41:0"
                }
              ]
            },
            "documentation": "@notice Terminate employee #`_employeeId` on `@formatDate(_endDate)`\n@param _employeeId Employee's identifier\n@param _endDate Termination timestamp in seconds",
            "id": 578,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 560,
                    "name": "TERMINATE_EMPLOYEE_ROLE",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 29,
                    "src": "13410:23:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 562,
                        "name": "_employeeId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 555,
                        "src": "13439:11:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 564,
                            "name": "_endDate",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 557,
                            "src": "13460:8:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          ],
                          "id": 563,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "13452:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          },
                          "typeName": "uint256"
                        },
                        "id": 565,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "13452:17:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 561,
                      "name": "arr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        9167,
                        9182,
                        9202,
                        9217,
                        9237,
                        9258,
                        9282,
                        9302,
                        9331,
                        9356,
                        9381,
                        9404,
                        9435,
                        9474,
                        9521,
                        9576
                      ],
                      "referencedDeclaration": 9435,
                      "src": "13435:3:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256[] memory)"
                      }
                    },
                    "id": 566,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13435:35:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                      "typeString": "uint256[] memory"
                    }
                  }
                ],
                "id": 567,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 559,
                  "name": "authP",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 10428,
                  "src": "13404:5:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$_t_array$_t_uint256_$dyn_memory_ptr_$",
                    "typeString": "modifier (bytes32,uint256[] memory)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "13404:67:0"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 569,
                    "name": "_employeeId",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 555,
                    "src": "13495:11:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                ],
                "id": 570,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 568,
                  "name": "employeeActive",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 286,
                  "src": "13480:14:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_uint256_$",
                    "typeString": "modifier (uint256)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "13480:27:0"
              }
            ],
            "name": "terminateEmployee",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 558,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 555,
                  "name": "_employeeId",
                  "nodeType": "VariableDeclaration",
                  "scope": 578,
                  "src": "13341:19:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 554,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "13341:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 557,
                  "name": "_endDate",
                  "nodeType": "VariableDeclaration",
                  "scope": 578,
                  "src": "13362:15:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 556,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "13362:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "13340:38:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 571,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "13512:0:0"
            },
            "scope": 1984,
            "src": "13314:256:0",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 617,
              "nodeType": "Block",
              "src": "14116:451:0",
              "statements": [
                {
                  "assignments": [
                    588
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 588,
                      "name": "employeeId",
                      "nodeType": "VariableDeclaration",
                      "scope": 618,
                      "src": "14126:18:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 587,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "14126:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 593,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 589,
                      "name": "employeeIds",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 174,
                      "src": "14147:11:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                        "typeString": "mapping(address => uint256)"
                      }
                    },
                    "id": 592,
                    "indexExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 590,
                        "name": "msg",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 15153,
                        "src": "14159:3:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_message",
                          "typeString": "msg"
                        }
                      },
                      "id": 591,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sender",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "14159:10:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "14147:23:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "14126:44:0"
                },
                {
                  "assignments": [
                    595
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 595,
                      "name": "oldAddress",
                      "nodeType": "VariableDeclaration",
                      "scope": 618,
                      "src": "14180:18:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 594,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "14180:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 600,
                  "initialValue": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 596,
                        "name": "employees",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 170,
                        "src": "14201:9:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Employee_$156_storage_$",
                          "typeString": "mapping(uint256 => struct Payroll.Employee storage ref)"
                        }
                      },
                      "id": 598,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 597,
                        "name": "employeeId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 588,
                        "src": "14211:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "14201:21:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Employee_$156_storage",
                        "typeString": "struct Payroll.Employee storage ref"
                      }
                    },
                    "id": 599,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "accountAddress",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 136,
                    "src": "14201:36:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "14180:57:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 602,
                        "name": "employeeId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 588,
                        "src": "14268:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 603,
                        "name": "_newAccountAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 580,
                        "src": "14280:18:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 601,
                      "name": "_setEmployeeAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1324,
                      "src": "14248:19:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_address_$returns$__$",
                        "typeString": "function (uint256,address)"
                      }
                    },
                    "id": 604,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14248:51:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 605,
                  "nodeType": "ExpressionStatement",
                  "src": "14248:51:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 609,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "delete",
                    "prefix": true,
                    "src": "14447:30:0",
                    "subExpression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 606,
                        "name": "employeeIds",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 174,
                        "src": "14454:11:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 608,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 607,
                        "name": "oldAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 595,
                        "src": "14466:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "14454:23:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 610,
                  "nodeType": "ExpressionStatement",
                  "src": "14447:30:0"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 612,
                        "name": "employeeId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 588,
                        "src": "14517:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 613,
                        "name": "_newAccountAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 580,
                        "src": "14529:18:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 614,
                        "name": "oldAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 595,
                        "src": "14549:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 611,
                      "name": "ChangeAddressByEmployee",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 228,
                      "src": "14493:23:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_address_$_t_address_$returns$__$",
                        "typeString": "function (uint256,address,address)"
                      }
                    },
                    "id": 615,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14493:67:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 616,
                  "nodeType": "EmitStatement",
                  "src": "14488:72:0"
                }
              ]
            },
            "documentation": "@notice Change your employee account address to `_newAccountAddress`\n@dev Initialization check is implicitly provided by `employeeMatches` as new employees can\n     only be added via `addEmployee(),` which requires initialization.\n     As the employee is allowed to call this, we enforce non-reentrancy.\n@param _newAccountAddress New address to receive payments for the requesting employee",
            "id": 618,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 583,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 582,
                  "name": "employeeMatches",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 304,
                  "src": "14087:15:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "14087:15:0"
              },
              {
                "arguments": null,
                "id": 585,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 584,
                  "name": "nonReentrant",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 10907,
                  "src": "14103:12:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "14103:12:0"
              }
            ],
            "name": "changeAddressByEmployee",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 581,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 580,
                  "name": "_newAccountAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 618,
                  "src": "14050:26:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 579,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "14050:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "14049:28:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 586,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "14116:0:0"
            },
            "scope": 1984,
            "src": "14017:550:0",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 736,
              "nodeType": "Block",
              "src": "15223:1052:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 635,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 632,
                            "name": "_tokens",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 621,
                            "src": "15279:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                              "typeString": "address[] calldata"
                            }
                          },
                          "id": 633,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "15279:14:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 634,
                          "name": "MAX_ALLOWED_TOKENS",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 50,
                          "src": "15297:18:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "15279:36:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 636,
                        "name": "ERROR_MAX_ALLOWED_TOKENS",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 85,
                        "src": "15317:24:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 631,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        15156,
                        15157
                      ],
                      "referencedDeclaration": 15157,
                      "src": "15271:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 637,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15271:71:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 638,
                  "nodeType": "ExpressionStatement",
                  "src": "15271:71:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 644,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 640,
                            "name": "_tokens",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 621,
                            "src": "15360:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                              "typeString": "address[] calldata"
                            }
                          },
                          "id": 641,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "15360:14:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 642,
                            "name": "_distribution",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 624,
                            "src": "15378:13:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                              "typeString": "uint256[] calldata"
                            }
                          },
                          "id": 643,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "15378:20:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "15360:38:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 645,
                        "name": "ERROR_TOKEN_ALLOCATION_MISMATCH",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 91,
                        "src": "15400:31:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 639,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        15156,
                        15157
                      ],
                      "referencedDeclaration": 15157,
                      "src": "15352:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 646,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15352:80:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 647,
                  "nodeType": "ExpressionStatement",
                  "src": "15352:80:0"
                },
                {
                  "assignments": [
                    649
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 649,
                      "name": "employeeId",
                      "nodeType": "VariableDeclaration",
                      "scope": 737,
                      "src": "15443:18:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 648,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "15443:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 654,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 650,
                      "name": "employeeIds",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 174,
                      "src": "15464:11:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                        "typeString": "mapping(address => uint256)"
                      }
                    },
                    "id": 653,
                    "indexExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 651,
                        "name": "msg",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 15153,
                        "src": "15476:3:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_message",
                          "typeString": "msg"
                        }
                      },
                      "id": 652,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sender",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "15476:10:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "15464:23:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "15443:44:0"
                },
                {
                  "assignments": [
                    656
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 656,
                      "name": "employee",
                      "nodeType": "VariableDeclaration",
                      "scope": 737,
                      "src": "15497:25:0",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                        "typeString": "struct Payroll.Employee"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 655,
                        "name": "Employee",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 156,
                        "src": "15497:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                          "typeString": "struct Payroll.Employee"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 660,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 657,
                      "name": "employees",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 170,
                      "src": "15525:9:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Employee_$156_storage_$",
                        "typeString": "mapping(uint256 => struct Payroll.Employee storage ref)"
                      }
                    },
                    "id": 659,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 658,
                      "name": "employeeId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 649,
                      "src": "15535:10:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "15525:21:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Employee_$156_storage",
                      "typeString": "struct Payroll.Employee storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "15497:49:0"
                },
                {
                  "assignments": [
                    664
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 664,
                      "name": "previousAllowedTokenAddresses",
                      "nodeType": "VariableDeclaration",
                      "scope": 737,
                      "src": "15602:46:0",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                        "typeString": "address[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 662,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "15602:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 663,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "15602:9:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                          "typeString": "address[]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 667,
                  "initialValue": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 665,
                      "name": "employee",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 656,
                      "src": "15651:8:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                        "typeString": "struct Payroll.Employee storage pointer"
                      }
                    },
                    "id": 666,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "allocationTokenAddresses",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 151,
                    "src": "15651:33:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage",
                      "typeString": "address[] storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "15602:82:0"
                },
                {
                  "body": {
                    "id": 687,
                    "nodeType": "Block",
                    "src": "15761:91:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 685,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "delete",
                          "prefix": true,
                          "src": "15775:66:0",
                          "subExpression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 679,
                                "name": "employee",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 656,
                                "src": "15782:8:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                                  "typeString": "struct Payroll.Employee storage pointer"
                                }
                              },
                              "id": 680,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "allocationTokens",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 155,
                              "src": "15782:25:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 684,
                            "indexExpression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 681,
                                "name": "previousAllowedTokenAddresses",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 664,
                                "src": "15808:29:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                  "typeString": "address[] memory"
                                }
                              },
                              "id": 683,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 682,
                                "name": "j",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 669,
                                "src": "15838:1:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "15808:32:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "15782:59:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 686,
                        "nodeType": "ExpressionStatement",
                        "src": "15775:66:0"
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 675,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 672,
                      "name": "j",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 669,
                      "src": "15714:1:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 673,
                        "name": "previousAllowedTokenAddresses",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 664,
                        "src": "15718:29:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        }
                      },
                      "id": 674,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "15718:36:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "15714:40:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 688,
                  "initializationExpression": {
                    "assignments": [
                      669
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 669,
                        "name": "j",
                        "nodeType": "VariableDeclaration",
                        "scope": 737,
                        "src": "15699:9:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 668,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "15699:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 671,
                    "initialValue": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 670,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "15711:1:0",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "15699:13:0"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 677,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "15756:3:0",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 676,
                        "name": "j",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 669,
                        "src": "15756:1:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 678,
                    "nodeType": "ExpressionStatement",
                    "src": "15756:3:0"
                  },
                  "nodeType": "ForStatement",
                  "src": "15694:158:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 691,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "delete",
                    "prefix": true,
                    "src": "15861:40:0",
                    "subExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 689,
                        "name": "employee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 656,
                        "src": "15868:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                          "typeString": "struct Payroll.Employee storage pointer"
                        }
                      },
                      "id": 690,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "allocationTokenAddresses",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 151,
                      "src": "15868:33:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_address_$dyn_storage",
                        "typeString": "address[] storage ref"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 692,
                  "nodeType": "ExpressionStatement",
                  "src": "15861:40:0"
                },
                {
                  "body": {
                    "id": 726,
                    "nodeType": "Block",
                    "src": "16019:145:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 709,
                                "name": "_tokens",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 621,
                                "src": "16072:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                  "typeString": "address[] calldata"
                                }
                              },
                              "id": 711,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 710,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 694,
                                "src": "16080:1:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "16072:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 704,
                                "name": "employee",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 656,
                                "src": "16033:8:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                                  "typeString": "struct Payroll.Employee storage pointer"
                                }
                              },
                              "id": 707,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "allocationTokenAddresses",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 151,
                              "src": "16033:33:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_address_$dyn_storage",
                                "typeString": "address[] storage ref"
                              }
                            },
                            "id": 708,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "push",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "16033:38:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_arraypush_nonpayable$_t_address_$returns$_t_uint256_$",
                              "typeString": "function (address) returns (uint256)"
                            }
                          },
                          "id": 712,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "16033:50:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 713,
                        "nodeType": "ExpressionStatement",
                        "src": "16033:50:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 724,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 714,
                                "name": "employee",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 656,
                                "src": "16097:8:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                                  "typeString": "struct Payroll.Employee storage pointer"
                                }
                              },
                              "id": 719,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "allocationTokens",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 155,
                              "src": "16097:25:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 720,
                            "indexExpression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 716,
                                "name": "_tokens",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 621,
                                "src": "16123:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                  "typeString": "address[] calldata"
                                }
                              },
                              "id": 718,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 717,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 694,
                                "src": "16131:1:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "16123:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "16097:37:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 721,
                              "name": "_distribution",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 624,
                              "src": "16137:13:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                                "typeString": "uint256[] calldata"
                              }
                            },
                            "id": 723,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 722,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 694,
                              "src": "16151:1:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "16137:16:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "16097:56:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 725,
                        "nodeType": "ExpressionStatement",
                        "src": "16097:56:0"
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 700,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 697,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 694,
                      "src": "15994:1:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 698,
                        "name": "_tokens",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 621,
                        "src": "15998:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                          "typeString": "address[] calldata"
                        }
                      },
                      "id": 699,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "15998:14:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "15994:18:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 727,
                  "initializationExpression": {
                    "assignments": [
                      694
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 694,
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "scope": 737,
                        "src": "15979:9:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 693,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "15979:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 696,
                    "initialValue": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 695,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "15991:1:0",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "15979:13:0"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 702,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "16014:3:0",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 701,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 694,
                        "src": "16014:1:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 703,
                    "nodeType": "ExpressionStatement",
                    "src": "16014:3:0"
                  },
                  "nodeType": "ForStatement",
                  "src": "15974:190:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 729,
                        "name": "employee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 656,
                        "src": "16213:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                          "typeString": "struct Payroll.Employee storage pointer"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                          "typeString": "struct Payroll.Employee storage pointer"
                        }
                      ],
                      "id": 728,
                      "name": "_ensureEmployeeTokenAllocationsIsValid",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1735,
                      "src": "16174:38:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_Employee_$156_storage_ptr_$returns$__$",
                        "typeString": "function (struct Payroll.Employee storage pointer) view"
                      }
                    },
                    "id": 730,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16174:48:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 731,
                  "nodeType": "ExpressionStatement",
                  "src": "16174:48:0"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 733,
                        "name": "employeeId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 649,
                        "src": "16257:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 732,
                      "name": "DetermineAllocation",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 232,
                      "src": "16237:19:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$returns$__$",
                        "typeString": "function (uint256)"
                      }
                    },
                    "id": 734,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16237:31:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 735,
                  "nodeType": "EmitStatement",
                  "src": "16232:36:0"
                }
              ]
            },
            "documentation": "@notice Set the token distribution for your payments\n@dev Initialization check is implicitly provided by `employeeMatches` as new employees can\n     only be added via `addEmployee(),` which requires initialization.\n     As the employee is allowed to call this, we enforce non-reentrancy.\n@param _tokens Array of token addresses; they must belong to the list of allowed tokens\n@param _distribution Array with each token's corresponding proportions (must be integers summing to 100)",
            "id": 737,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 627,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 626,
                  "name": "employeeMatches",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 304,
                  "src": "15194:15:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "15194:15:0"
              },
              {
                "arguments": null,
                "id": 629,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 628,
                  "name": "nonReentrant",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 10907,
                  "src": "15210:12:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "15210:12:0"
              }
            ],
            "name": "determineAllocation",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 625,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 621,
                  "name": "_tokens",
                  "nodeType": "VariableDeclaration",
                  "scope": 737,
                  "src": "15141:17:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 619,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "15141:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 620,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "15141:9:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 624,
                  "name": "_distribution",
                  "nodeType": "VariableDeclaration",
                  "scope": 737,
                  "src": "15160:23:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 622,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "15160:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 623,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "15160:9:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "15140:44:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 630,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "15223:0:0"
            },
            "scope": 1984,
            "src": "15112:1163:0",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 883,
              "nodeType": "Block",
              "src": "17169:1766:0",
              "statements": [
                {
                  "assignments": [],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 752,
                      "name": "paymentAmount",
                      "nodeType": "VariableDeclaration",
                      "scope": 884,
                      "src": "17179:21:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 751,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "17179:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 753,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "17179:21:0"
                },
                {
                  "assignments": [
                    755
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 755,
                      "name": "employeeId",
                      "nodeType": "VariableDeclaration",
                      "scope": 884,
                      "src": "17210:18:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 754,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "17210:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 760,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 756,
                      "name": "employeeIds",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 174,
                      "src": "17231:11:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                        "typeString": "mapping(address => uint256)"
                      }
                    },
                    "id": 759,
                    "indexExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 757,
                        "name": "msg",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 15153,
                        "src": "17243:3:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_message",
                          "typeString": "msg"
                        }
                      },
                      "id": 758,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sender",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "17243:10:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "17231:23:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "17210:44:0"
                },
                {
                  "assignments": [
                    762
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 762,
                      "name": "employee",
                      "nodeType": "VariableDeclaration",
                      "scope": 884,
                      "src": "17264:25:0",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                        "typeString": "struct Payroll.Employee"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 761,
                        "name": "Employee",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 156,
                        "src": "17264:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                          "typeString": "struct Payroll.Employee"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 766,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 763,
                      "name": "employees",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 170,
                      "src": "17292:9:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Employee_$156_storage_$",
                        "typeString": "mapping(uint256 => struct Payroll.Employee storage ref)"
                      }
                    },
                    "id": 765,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 764,
                      "name": "employeeId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 755,
                      "src": "17302:10:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "17292:21:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Employee_$156_storage",
                      "typeString": "struct Payroll.Employee storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "17264:49:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 768,
                        "name": "employee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 762,
                        "src": "17362:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                          "typeString": "struct Payroll.Employee storage pointer"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                          "typeString": "struct Payroll.Employee storage pointer"
                        }
                      ],
                      "id": 767,
                      "name": "_ensureEmployeeTokenAllocationsIsValid",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1735,
                      "src": "17323:38:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_Employee_$156_storage_ptr_$returns$__$",
                        "typeString": "function (struct Payroll.Employee storage pointer) view"
                      }
                    },
                    "id": 769,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17323:48:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 770,
                  "nodeType": "ExpressionStatement",
                  "src": "17323:48:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 782,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 775,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 772,
                              "name": "_minRates",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 744,
                              "src": "17389:9:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                                "typeString": "uint256[] calldata"
                              }
                            },
                            "id": 773,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "17389:16:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 774,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "17409:1:0",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "17389:21:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "||",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 781,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 776,
                              "name": "_minRates",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 744,
                              "src": "17414:9:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                                "typeString": "uint256[] calldata"
                              }
                            },
                            "id": 777,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "17414:16:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 778,
                                "name": "employee",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 762,
                                "src": "17434:8:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                                  "typeString": "struct Payroll.Employee storage pointer"
                                }
                              },
                              "id": 779,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "allocationTokenAddresses",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 151,
                              "src": "17434:33:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_address_$dyn_storage",
                                "typeString": "address[] storage ref"
                              }
                            },
                            "id": 780,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "17434:40:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "17414:60:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "17389:85:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 783,
                        "name": "ERROR_MIN_RATES_MISMATCH",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 88,
                        "src": "17476:24:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 771,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        15156,
                        15157
                      ],
                      "referencedDeclaration": 15157,
                      "src": "17381:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 784,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17381:120:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 785,
                  "nodeType": "ExpressionStatement",
                  "src": "17381:120:0"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_PaymentType_$134",
                      "typeString": "enum Payroll.PaymentType"
                    },
                    "id": 789,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 786,
                      "name": "_type",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 739,
                      "src": "17559:5:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_PaymentType_$134",
                        "typeString": "enum Payroll.PaymentType"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 787,
                        "name": "PaymentType",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 134,
                        "src": "17568:11:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_PaymentType_$134_$",
                          "typeString": "type(enum Payroll.PaymentType)"
                        }
                      },
                      "id": 788,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "Payroll",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "17568:19:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_PaymentType_$134",
                        "typeString": "enum Payroll.PaymentType"
                      }
                    },
                    "src": "17559:28:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "condition": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_enum$_PaymentType_$134",
                        "typeString": "enum Payroll.PaymentType"
                      },
                      "id": 812,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 809,
                        "name": "_type",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 739,
                        "src": "18124:5:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_PaymentType_$134",
                          "typeString": "enum Payroll.PaymentType"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 810,
                          "name": "PaymentType",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 134,
                          "src": "18133:11:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_enum$_PaymentType_$134_$",
                            "typeString": "type(enum Payroll.PaymentType)"
                          }
                        },
                        "id": 811,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberName": "Reimbursement",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "18133:25:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_PaymentType_$134",
                          "typeString": "enum Payroll.PaymentType"
                        }
                      },
                      "src": "18124:34:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseBody": {
                      "condition": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_enum$_PaymentType_$134",
                          "typeString": "enum Payroll.PaymentType"
                        },
                        "id": 838,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 835,
                          "name": "_type",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 739,
                          "src": "18412:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_PaymentType_$134",
                            "typeString": "enum Payroll.PaymentType"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 836,
                            "name": "PaymentType",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 134,
                            "src": "18421:11:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_enum$_PaymentType_$134_$",
                              "typeString": "type(enum Payroll.PaymentType)"
                            }
                          },
                          "id": 837,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "Bonus",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "18421:17:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_PaymentType_$134",
                            "typeString": "enum Payroll.PaymentType"
                          }
                        },
                        "src": "18412:26:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "falseBody": {
                        "id": 865,
                        "nodeType": "Block",
                        "src": "18661:59:0",
                        "statements": [
                          {
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 862,
                                  "name": "ERROR_INVALID_PAYMENT_TYPE",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 100,
                                  "src": "18682:26:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_string_memory",
                                    "typeString": "string memory"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_string_memory",
                                    "typeString": "string memory"
                                  }
                                ],
                                "id": 861,
                                "name": "revert",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [
                                  15158,
                                  15159
                                ],
                                "referencedDeclaration": 15159,
                                "src": "18675:6:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
                                  "typeString": "function (string memory) pure"
                                }
                              },
                              "id": 863,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "18675:34:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$__$",
                                "typeString": "tuple()"
                              }
                            },
                            "id": 864,
                            "nodeType": "ExpressionStatement",
                            "src": "18675:34:0"
                          }
                        ]
                      },
                      "id": 866,
                      "nodeType": "IfStatement",
                      "src": "18408:312:0",
                      "trueBody": {
                        "id": 860,
                        "nodeType": "Block",
                        "src": "18440:215:0",
                        "statements": [
                          {
                            "assignments": [
                              840
                            ],
                            "declarations": [
                              {
                                "constant": false,
                                "id": 840,
                                "name": "owedBonusAmount",
                                "nodeType": "VariableDeclaration",
                                "scope": 884,
                                "src": "18454:23:0",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "typeName": {
                                  "id": 839,
                                  "name": "uint256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "18454:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "value": null,
                                "visibility": "internal"
                              }
                            ],
                            "id": 843,
                            "initialValue": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 841,
                                "name": "employee",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 762,
                                "src": "18480:8:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                                  "typeString": "struct Payroll.Employee storage pointer"
                                }
                              },
                              "id": 842,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "bonus",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 142,
                              "src": "18480:14:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "VariableDeclarationStatement",
                            "src": "18454:40:0"
                          },
                          {
                            "expression": {
                              "argumentTypes": null,
                              "id": 849,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "argumentTypes": null,
                                "id": 844,
                                "name": "paymentAmount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 752,
                                "src": "18508:13:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 846,
                                    "name": "owedBonusAmount",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 840,
                                    "src": "18545:15:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 847,
                                    "name": "_requestedAmount",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 741,
                                    "src": "18562:16:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 845,
                                  "name": "_ensurePaymentAmount",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1983,
                                  "src": "18524:20:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                    "typeString": "function (uint256,uint256) pure returns (uint256)"
                                  }
                                },
                                "id": 848,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "18524:55:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "18508:71:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 850,
                            "nodeType": "ExpressionStatement",
                            "src": "18508:71:0"
                          },
                          {
                            "expression": {
                              "argumentTypes": null,
                              "id": 858,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 851,
                                  "name": "employee",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 762,
                                  "src": "18593:8:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                                    "typeString": "struct Payroll.Employee storage pointer"
                                  }
                                },
                                "id": 853,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": true,
                                "memberName": "bonus",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 142,
                                "src": "18593:14:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 856,
                                    "name": "paymentAmount",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 752,
                                    "src": "18630:13:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 854,
                                    "name": "owedBonusAmount",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 840,
                                    "src": "18610:15:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 855,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "sub",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 14017,
                                  "src": "18610:19:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                    "typeString": "function (uint256,uint256) pure returns (uint256)"
                                  }
                                },
                                "id": 857,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "18610:34:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "18593:51:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 859,
                            "nodeType": "ExpressionStatement",
                            "src": "18593:51:0"
                          }
                        ]
                      }
                    },
                    "id": 867,
                    "nodeType": "IfStatement",
                    "src": "18120:600:0",
                    "trueBody": {
                      "id": 834,
                      "nodeType": "Block",
                      "src": "18160:242:0",
                      "statements": [
                        {
                          "assignments": [
                            814
                          ],
                          "declarations": [
                            {
                              "constant": false,
                              "id": 814,
                              "name": "owedReimbursements",
                              "nodeType": "VariableDeclaration",
                              "scope": 884,
                              "src": "18174:26:0",
                              "stateVariable": false,
                              "storageLocation": "default",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "typeName": {
                                "id": 813,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "18174:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "value": null,
                              "visibility": "internal"
                            }
                          ],
                          "id": 817,
                          "initialValue": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 815,
                              "name": "employee",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 762,
                              "src": "18203:8:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                                "typeString": "struct Payroll.Employee storage pointer"
                              }
                            },
                            "id": 816,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "reimbursements",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 144,
                            "src": "18203:23:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "VariableDeclarationStatement",
                          "src": "18174:52:0"
                        },
                        {
                          "expression": {
                            "argumentTypes": null,
                            "id": 823,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "argumentTypes": null,
                              "id": 818,
                              "name": "paymentAmount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 752,
                              "src": "18240:13:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 820,
                                  "name": "owedReimbursements",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 814,
                                  "src": "18277:18:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 821,
                                  "name": "_requestedAmount",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 741,
                                  "src": "18297:16:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 819,
                                "name": "_ensurePaymentAmount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1983,
                                "src": "18256:20:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                  "typeString": "function (uint256,uint256) pure returns (uint256)"
                                }
                              },
                              "id": 822,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "18256:58:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "18240:74:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 824,
                          "nodeType": "ExpressionStatement",
                          "src": "18240:74:0"
                        },
                        {
                          "expression": {
                            "argumentTypes": null,
                            "id": 832,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 825,
                                "name": "employee",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 762,
                                "src": "18328:8:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                                  "typeString": "struct Payroll.Employee storage pointer"
                                }
                              },
                              "id": 827,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "memberName": "reimbursements",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 144,
                              "src": "18328:23:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 830,
                                  "name": "paymentAmount",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 752,
                                  "src": "18377:13:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 828,
                                  "name": "owedReimbursements",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 814,
                                  "src": "18354:18:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 829,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sub",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 14017,
                                "src": "18354:22:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                  "typeString": "function (uint256,uint256) pure returns (uint256)"
                                }
                              },
                              "id": 831,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "18354:37:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "18328:63:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 833,
                          "nodeType": "ExpressionStatement",
                          "src": "18328:63:0"
                        }
                      ]
                    }
                  },
                  "id": 868,
                  "nodeType": "IfStatement",
                  "src": "17555:1165:0",
                  "trueBody": {
                    "id": 808,
                    "nodeType": "Block",
                    "src": "17589:525:0",
                    "statements": [
                      {
                        "assignments": [
                          791
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 791,
                            "name": "totalOwedSalary",
                            "nodeType": "VariableDeclaration",
                            "scope": 884,
                            "src": "17876:23:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 790,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "17876:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 795,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 793,
                              "name": "employee",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 762,
                              "src": "17928:8:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                                "typeString": "struct Payroll.Employee storage pointer"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                                "typeString": "struct Payroll.Employee storage pointer"
                              }
                            ],
                            "id": 792,
                            "name": "_getTotalOwedCappedSalary",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1916,
                            "src": "17902:25:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_struct$_Employee_$156_storage_ptr_$returns$_t_uint256_$",
                              "typeString": "function (struct Payroll.Employee storage pointer) view returns (uint256)"
                            }
                          },
                          "id": 794,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "17902:35:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "17876:61:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 801,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 796,
                            "name": "paymentAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 752,
                            "src": "17951:13:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 798,
                                "name": "totalOwedSalary",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 791,
                                "src": "17988:15:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 799,
                                "name": "_requestedAmount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 741,
                                "src": "18005:16:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 797,
                              "name": "_ensurePaymentAmount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1983,
                              "src": "17967:20:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 800,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "17967:55:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "17951:71:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 802,
                        "nodeType": "ExpressionStatement",
                        "src": "17951:71:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 804,
                              "name": "employee",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 762,
                              "src": "18079:8:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                                "typeString": "struct Payroll.Employee storage pointer"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 805,
                              "name": "paymentAmount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 752,
                              "src": "18089:13:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                                "typeString": "struct Payroll.Employee storage pointer"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 803,
                            "name": "_updateEmployeeAccountingBasedOnPaidSalary",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1658,
                            "src": "18036:42:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Employee_$156_storage_ptr_$_t_uint256_$returns$__$",
                              "typeString": "function (struct Payroll.Employee storage pointer,uint256)"
                            }
                          },
                          "id": 806,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "18036:67:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 807,
                        "nodeType": "ExpressionStatement",
                        "src": "18036:67:0"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 871,
                            "name": "employeeId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 755,
                            "src": "18804:10:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 872,
                            "name": "_type",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 739,
                            "src": "18816:5:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_PaymentType_$134",
                              "typeString": "enum Payroll.PaymentType"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 873,
                            "name": "paymentAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 752,
                            "src": "18823:13:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 874,
                            "name": "_minRates",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 744,
                            "src": "18838:9:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                              "typeString": "uint256[] calldata"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_enum$_PaymentType_$134",
                              "typeString": "enum Payroll.PaymentType"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                              "typeString": "uint256[] calldata"
                            }
                          ],
                          "id": 870,
                          "name": "_transferTokensAmount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1498,
                          "src": "18782:21:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_enum$_PaymentType_$134_$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_bool_$",
                            "typeString": "function (uint256,enum Payroll.PaymentType,uint256,uint256[] memory) returns (bool)"
                          }
                        },
                        "id": 875,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "18782:66:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 876,
                        "name": "ERROR_NOTHING_PAID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 103,
                        "src": "18850:18:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 869,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        15156,
                        15157
                      ],
                      "referencedDeclaration": 15157,
                      "src": "18774:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 877,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18774:95:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 878,
                  "nodeType": "ExpressionStatement",
                  "src": "18774:95:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 880,
                        "name": "employeeId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 755,
                        "src": "18917:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 879,
                      "name": "_removeEmployeeIfTerminatedAndPaidOut",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1544,
                      "src": "18879:37:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$__$",
                        "typeString": "function (uint256)"
                      }
                    },
                    "id": 881,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18879:49:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 882,
                  "nodeType": "ExpressionStatement",
                  "src": "18879:49:0"
                }
              ]
            },
            "documentation": "@notice Request your `_type == 0 ? 'salary' : _type == 1 ? 'reimbursements' : 'bonus'`\n@dev Reverts if no payments were made.\n     Initialization check is implicitly provided by `employeeMatches` as new employees can\n     only be added via `addEmployee(),` which requires initialization.\n     As the employee is allowed to call this, we enforce non-reentrancy.\n@param _type Payment type being requested (Payroll, Reimbursement or Bonus)\n@param _requestedAmount Requested amount to pay for the payment type. Must be less than or equal to total owed amount for the payment type, or zero to request all.\n@param _minRates Array of employee's minimum acceptable rates for their allowed payment tokens",
            "id": 884,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 747,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 746,
                  "name": "employeeMatches",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 304,
                  "src": "17140:15:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "17140:15:0"
              },
              {
                "arguments": null,
                "id": 749,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 748,
                  "name": "nonReentrant",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 10907,
                  "src": "17156:12:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "17156:12:0"
              }
            ],
            "name": "payday",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 745,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 739,
                  "name": "_type",
                  "nodeType": "VariableDeclaration",
                  "scope": 884,
                  "src": "17065:17:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_PaymentType_$134",
                    "typeString": "enum Payroll.PaymentType"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 738,
                    "name": "PaymentType",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 134,
                    "src": "17065:11:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_PaymentType_$134",
                      "typeString": "enum Payroll.PaymentType"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 741,
                  "name": "_requestedAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 884,
                  "src": "17084:24:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 740,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "17084:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 744,
                  "name": "_minRates",
                  "nodeType": "VariableDeclaration",
                  "scope": 884,
                  "src": "17110:19:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 742,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "17110:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 743,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "17110:9:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "17064:66:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 750,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "17169:0:0"
            },
            "scope": 1984,
            "src": "17049:1886:0",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 891,
              "nodeType": "Block",
              "src": "19158:28:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 889,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "19175:4:0",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 888,
                  "id": 890,
                  "nodeType": "Return",
                  "src": "19168:11:0"
                }
              ]
            },
            "documentation": "@dev IForwarder interface conformance. Tells whether the Payroll app is a forwarder or not.\n@return Always true",
            "id": 892,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "isForwarder",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 885,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "19126:2:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 888,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 887,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 892,
                  "src": "19152:4:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 886,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "19152:4:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "19151:6:0"
            },
            "scope": 1984,
            "src": "19106:80:0",
            "stateMutability": "pure",
            "superFunction": 10669,
            "visibility": "external"
          },
          {
            "body": {
              "id": 937,
              "nodeType": "Block",
              "src": "19480:500:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 899,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 15153,
                              "src": "19509:3:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 900,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "19509:10:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 901,
                            "name": "_evmScript",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 894,
                            "src": "19521:10:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          ],
                          "id": 898,
                          "name": "canForward",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [
                            954
                          ],
                          "referencedDeclaration": 954,
                          "src": "19498:10:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_address_$_t_bytes_memory_ptr_$returns$_t_bool_$",
                            "typeString": "function (address,bytes memory) view returns (bool)"
                          }
                        },
                        "id": 902,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "19498:34:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 903,
                        "name": "ERROR_CAN_NOT_FORWARD",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 106,
                        "src": "19534:21:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 897,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        15156,
                        15157
                      ],
                      "referencedDeclaration": 15157,
                      "src": "19490:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 904,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "19490:66:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 905,
                  "nodeType": "ExpressionStatement",
                  "src": "19490:66:0"
                },
                {
                  "assignments": [
                    907
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 907,
                      "name": "input",
                      "nodeType": "VariableDeclaration",
                      "scope": 938,
                      "src": "19566:18:0",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 906,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "19566:5:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 912,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 910,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "19597:1:0",
                        "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": 909,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "19587:9:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_bytes_memory_$",
                        "typeString": "function (uint256) pure returns (bytes memory)"
                      },
                      "typeName": {
                        "id": 908,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "19591:5:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      }
                    },
                    "id": 911,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "19587:12:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory",
                      "typeString": "bytes memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "19566:33:0"
                },
                {
                  "assignments": [
                    916
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 916,
                      "name": "blacklist",
                      "nodeType": "VariableDeclaration",
                      "scope": 938,
                      "src": "19837:26:0",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                        "typeString": "address[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 914,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "19837:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 915,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "19837:9:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                          "typeString": "address[]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 922,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "31",
                        "id": 920,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "19880:1:0",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "1"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        }
                      ],
                      "id": 919,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "19866:13:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_address_$dyn_memory_$",
                        "typeString": "function (uint256) pure returns (address[] memory)"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 917,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "19870:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 918,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "19870:9:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                          "typeString": "address[]"
                        }
                      }
                    },
                    "id": 921,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "19866:16:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_memory",
                      "typeString": "address[] memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "19837:45:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 929,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 923,
                        "name": "blacklist",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 916,
                        "src": "19892:9:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        }
                      },
                      "id": 925,
                      "indexExpression": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 924,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "19902:1:0",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "19892:12:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 927,
                          "name": "finance",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 158,
                          "src": "19915:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_Finance_$5528",
                            "typeString": "contract Finance"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_Finance_$5528",
                            "typeString": "contract Finance"
                          }
                        ],
                        "id": 926,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "19907:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 928,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "19907:16:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "19892:31:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 930,
                  "nodeType": "ExpressionStatement",
                  "src": "19892:31:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 932,
                        "name": "_evmScript",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 894,
                        "src": "19944:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 933,
                        "name": "input",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 907,
                        "src": "19956:5:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 934,
                        "name": "blacklist",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 916,
                        "src": "19963:9:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        }
                      ],
                      "id": 931,
                      "name": "runScript",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11788,
                      "src": "19934:9:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$_t_array$_t_address_$dyn_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                        "typeString": "function (bytes memory,bytes memory,address[] memory) returns (bytes memory)"
                      }
                    },
                    "id": 935,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "19934:39:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "id": 936,
                  "nodeType": "ExpressionStatement",
                  "src": "19934:39:0"
                }
              ]
            },
            "documentation": "@notice Execute desired action as an active employee\n@dev IForwarder interface conformance. Allows active employees to run EVMScripts in the context of the Payroll app.\n@param _evmScript Script being executed",
            "id": 938,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "forward",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 895,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 894,
                  "name": "_evmScript",
                  "nodeType": "VariableDeclaration",
                  "scope": 938,
                  "src": "19455:16:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 893,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "19455:5:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "19454:18:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 896,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "19480:0:0"
            },
            "scope": 1984,
            "src": "19438:542:0",
            "stateMutability": "nonpayable",
            "superFunction": 10683,
            "visibility": "public"
          },
          {
            "body": {
              "id": 953,
              "nodeType": "Block",
              "src": "20333:65:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 948,
                          "name": "employeeIds",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 174,
                          "src": "20370:11:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                            "typeString": "mapping(address => uint256)"
                          }
                        },
                        "id": 950,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 949,
                          "name": "_sender",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 940,
                          "src": "20382:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "20370:20:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 947,
                      "name": "_isEmployeeIdActive",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1763,
                      "src": "20350:19:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_bool_$",
                        "typeString": "function (uint256) view returns (bool)"
                      }
                    },
                    "id": 951,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "20350:41:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 946,
                  "id": 952,
                  "nodeType": "Return",
                  "src": "20343:48:0"
                }
              ]
            },
            "documentation": "@dev IForwarder interface conformance. Tells whether a given address can forward actions or not.\n@param _sender Address of the account intending to forward an action\n@return True if the given address is an active employee, false otherwise",
            "id": 954,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "canForward",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 943,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 940,
                  "name": "_sender",
                  "nodeType": "VariableDeclaration",
                  "scope": 954,
                  "src": "20282:15:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 939,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "20282:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 942,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 954,
                  "src": "20299:5:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 941,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "20299:5:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "20281:24:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 946,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 945,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 954,
                  "src": "20327:4:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 944,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "20327:4:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "20326:6:0"
            },
            "scope": 1984,
            "src": "20262:136:0",
            "stateMutability": "view",
            "superFunction": 10678,
            "visibility": "public"
          },
          {
            "body": {
              "id": 976,
              "nodeType": "Block",
              "src": "20698:142:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 968,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 962,
                            "name": "employeeIds",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 174,
                            "src": "20716:11:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 964,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 963,
                            "name": "_accountAddress",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 956,
                            "src": "20728:15:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "20716:28:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 966,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "20756:1:0",
                              "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": 965,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "20748:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint256_$",
                              "typeString": "type(uint256)"
                            },
                            "typeName": "uint256"
                          },
                          "id": 967,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "20748:10:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "20716:42:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 969,
                        "name": "ERROR_EMPLOYEE_DOESNT_EXIST",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 70,
                        "src": "20760:27:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 961,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        15156,
                        15157
                      ],
                      "referencedDeclaration": 15157,
                      "src": "20708:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 970,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "20708:80:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 971,
                  "nodeType": "ExpressionStatement",
                  "src": "20708:80:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 972,
                      "name": "employeeIds",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 174,
                      "src": "20805:11:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                        "typeString": "mapping(address => uint256)"
                      }
                    },
                    "id": 974,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 973,
                      "name": "_accountAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 956,
                      "src": "20817:15:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "20805:28:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 960,
                  "id": 975,
                  "nodeType": "Return",
                  "src": "20798:35:0"
                }
              ]
            },
            "documentation": "@dev Return employee's identifier by their account address\n@param _accountAddress Employee's address to receive payments\n@return Employee's identifier",
            "id": 977,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getEmployeeIdByAddress",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 957,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 956,
                  "name": "_accountAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 977,
                  "src": "20643:23:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 955,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "20643:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "20642:25:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 960,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 959,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 977,
                  "src": "20689:7:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 958,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "20689:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "20688:9:0"
            },
            "scope": 1984,
            "src": "20611:229:0",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1048,
              "nodeType": "Block",
              "src": "21789:453:0",
              "statements": [
                {
                  "assignments": [
                    1003
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1003,
                      "name": "employee",
                      "nodeType": "VariableDeclaration",
                      "scope": 1049,
                      "src": "21799:25:0",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                        "typeString": "struct Payroll.Employee"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 1002,
                        "name": "Employee",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 156,
                        "src": "21799:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                          "typeString": "struct Payroll.Employee"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1007,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 1004,
                      "name": "employees",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 170,
                      "src": "21827:9:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Employee_$156_storage_$",
                        "typeString": "mapping(uint256 => struct Payroll.Employee storage ref)"
                      }
                    },
                    "id": 1006,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 1005,
                      "name": "_employeeId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 979,
                      "src": "21837:11:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "21827:22:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Employee_$156_storage",
                      "typeString": "struct Payroll.Employee storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "21799:50:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1011,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1008,
                      "name": "accountAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 985,
                      "src": "21860:14:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1009,
                        "name": "employee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1003,
                        "src": "21877:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                          "typeString": "struct Payroll.Employee storage pointer"
                        }
                      },
                      "id": 1010,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "accountAddress",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 136,
                      "src": "21877:23:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "21860:40:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 1012,
                  "nodeType": "ExpressionStatement",
                  "src": "21860:40:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1016,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1013,
                      "name": "denominationSalary",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 987,
                      "src": "21910:18:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1014,
                        "name": "employee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1003,
                        "src": "21931:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                          "typeString": "struct Payroll.Employee storage pointer"
                        }
                      },
                      "id": 1015,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "denominationTokenSalary",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 138,
                      "src": "21931:32:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "21910:53:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1017,
                  "nodeType": "ExpressionStatement",
                  "src": "21910:53:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1021,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1018,
                      "name": "accruedSalary",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 989,
                      "src": "21973:13:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1019,
                        "name": "employee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1003,
                        "src": "21989:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                          "typeString": "struct Payroll.Employee storage pointer"
                        }
                      },
                      "id": 1020,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "accruedSalary",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 140,
                      "src": "21989:22:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "21973:38:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1022,
                  "nodeType": "ExpressionStatement",
                  "src": "21973:38:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1026,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1023,
                      "name": "bonus",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 991,
                      "src": "22021:5:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1024,
                        "name": "employee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1003,
                        "src": "22029:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                          "typeString": "struct Payroll.Employee storage pointer"
                        }
                      },
                      "id": 1025,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "bonus",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 142,
                      "src": "22029:14:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "22021:22:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1027,
                  "nodeType": "ExpressionStatement",
                  "src": "22021:22:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1031,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1028,
                      "name": "reimbursements",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 993,
                      "src": "22053:14:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1029,
                        "name": "employee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1003,
                        "src": "22070:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                          "typeString": "struct Payroll.Employee storage pointer"
                        }
                      },
                      "id": 1030,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "reimbursements",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 144,
                      "src": "22070:23:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "22053:40:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1032,
                  "nodeType": "ExpressionStatement",
                  "src": "22053:40:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1036,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1033,
                      "name": "lastPayroll",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 995,
                      "src": "22103:11:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1034,
                        "name": "employee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1003,
                        "src": "22117:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                          "typeString": "struct Payroll.Employee storage pointer"
                        }
                      },
                      "id": 1035,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "lastPayroll",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 146,
                      "src": "22117:20:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "22103:34:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 1037,
                  "nodeType": "ExpressionStatement",
                  "src": "22103:34:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1041,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1038,
                      "name": "endDate",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 997,
                      "src": "22147:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1039,
                        "name": "employee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1003,
                        "src": "22157:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                          "typeString": "struct Payroll.Employee storage pointer"
                        }
                      },
                      "id": 1040,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "endDate",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 148,
                      "src": "22157:16:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "22147:26:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 1042,
                  "nodeType": "ExpressionStatement",
                  "src": "22147:26:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1046,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1043,
                      "name": "allocationTokens",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1000,
                      "src": "22183:16:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                        "typeString": "address[] memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1044,
                        "name": "employee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1003,
                        "src": "22202:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                          "typeString": "struct Payroll.Employee storage pointer"
                        }
                      },
                      "id": 1045,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "allocationTokenAddresses",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 151,
                      "src": "22202:33:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_address_$dyn_storage",
                        "typeString": "address[] storage ref"
                      }
                    },
                    "src": "22183:52:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                      "typeString": "address[] memory"
                    }
                  },
                  "id": 1047,
                  "nodeType": "ExpressionStatement",
                  "src": "22183:52:0"
                }
              ]
            },
            "documentation": "@dev Return all information for employee by their ID\n@param _employeeId Employee's identifier\n@return Employee's address to receive payments\n@return Employee's salary, per second in denomination token\n@return Employee's accrued salary\n@return Employee's bonus amount\n@return Employee's reimbursements amount\n@return Employee's last payment date\n@return Employee's termination date (max uint64 if none)\n@return Employee's allowed payment tokens",
            "id": 1049,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 982,
                    "name": "_employeeId",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 979,
                    "src": "21471:11:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                ],
                "id": 983,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 981,
                  "name": "employeeIdExists",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 273,
                  "src": "21454:16:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_uint256_$",
                    "typeString": "modifier (uint256)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "21454:29:0"
              }
            ],
            "name": "getEmployee",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 980,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 979,
                  "name": "_employeeId",
                  "nodeType": "VariableDeclaration",
                  "scope": 1049,
                  "src": "21397:19:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 978,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "21397:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "21396:21:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 1001,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 985,
                  "name": "accountAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 1049,
                  "src": "21514:22:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 984,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "21514:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 987,
                  "name": "denominationSalary",
                  "nodeType": "VariableDeclaration",
                  "scope": 1049,
                  "src": "21550:26:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 986,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "21550:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 989,
                  "name": "accruedSalary",
                  "nodeType": "VariableDeclaration",
                  "scope": 1049,
                  "src": "21590:21:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 988,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "21590:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 991,
                  "name": "bonus",
                  "nodeType": "VariableDeclaration",
                  "scope": 1049,
                  "src": "21625:13:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 990,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "21625:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 993,
                  "name": "reimbursements",
                  "nodeType": "VariableDeclaration",
                  "scope": 1049,
                  "src": "21652:22:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 992,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "21652:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 995,
                  "name": "lastPayroll",
                  "nodeType": "VariableDeclaration",
                  "scope": 1049,
                  "src": "21688:18:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 994,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "21688:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 997,
                  "name": "endDate",
                  "nodeType": "VariableDeclaration",
                  "scope": 1049,
                  "src": "21720:14:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 996,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "21720:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1000,
                  "name": "allocationTokens",
                  "nodeType": "VariableDeclaration",
                  "scope": 1049,
                  "src": "21748:26:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 998,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "21748:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 999,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "21748:9:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "21500:284:0"
            },
            "scope": 1984,
            "src": "21376:866:0",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1065,
              "nodeType": "Block",
              "src": "22693:73:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 1060,
                          "name": "employees",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 170,
                          "src": "22736:9:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Employee_$156_storage_$",
                            "typeString": "mapping(uint256 => struct Payroll.Employee storage ref)"
                          }
                        },
                        "id": 1062,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 1061,
                          "name": "_employeeId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1051,
                          "src": "22746:11:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "22736:22:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Employee_$156_storage",
                          "typeString": "struct Payroll.Employee storage ref"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_Employee_$156_storage",
                          "typeString": "struct Payroll.Employee storage ref"
                        }
                      ],
                      "id": 1059,
                      "name": "_getTotalOwedCappedSalary",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1916,
                      "src": "22710:25:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_Employee_$156_storage_ptr_$returns$_t_uint256_$",
                        "typeString": "function (struct Payroll.Employee storage pointer) view returns (uint256)"
                      }
                    },
                    "id": 1063,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "22710:49:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 1058,
                  "id": 1064,
                  "nodeType": "Return",
                  "src": "22703:56:0"
                }
              ]
            },
            "documentation": "@dev Get owed salary since last payroll for an employee. It will take into account the accrued salary as well.\n     The result will be capped to max uint256 to avoid having an overflow.\n@return Employee's total owed salary: current owed payroll since the last payroll date, plus the accrued salary.",
            "id": 1066,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 1054,
                    "name": "_employeeId",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1051,
                    "src": "22662:11:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                ],
                "id": 1055,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1053,
                  "name": "employeeIdExists",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 273,
                  "src": "22645:16:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_uint256_$",
                    "typeString": "modifier (uint256)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "22645:29:0"
              }
            ],
            "name": "getTotalOwedSalary",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1052,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1051,
                  "name": "_employeeId",
                  "nodeType": "VariableDeclaration",
                  "scope": 1066,
                  "src": "22612:19:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1050,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "22612:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "22611:21:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 1058,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1057,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1066,
                  "src": "22684:7:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1056,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "22684:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "22683:9:0"
            },
            "scope": 1984,
            "src": "22584:182:0",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1085,
              "nodeType": "Block",
              "src": "23153:71:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 1078,
                          "name": "employees",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 170,
                          "src": "23170:9:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Employee_$156_storage_$",
                            "typeString": "mapping(uint256 => struct Payroll.Employee storage ref)"
                          }
                        },
                        "id": 1080,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 1079,
                          "name": "_employeeId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1068,
                          "src": "23180:11:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "23170:22:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Employee_$156_storage",
                          "typeString": "struct Payroll.Employee storage ref"
                        }
                      },
                      "id": 1081,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "allocationTokens",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 155,
                      "src": "23170:39:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                        "typeString": "mapping(address => uint256)"
                      }
                    },
                    "id": 1083,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 1082,
                      "name": "_token",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1070,
                      "src": "23210:6:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "23170:47:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 1077,
                  "id": 1084,
                  "nodeType": "Return",
                  "src": "23163:54:0"
                }
              ]
            },
            "documentation": "@dev Get an employee's payment allocation for a token\n@param _employeeId Employee's identifier\n@param _token Token to query the payment allocation for\n@return Employee's payment allocation for the token being queried",
            "id": 1086,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 1073,
                    "name": "_employeeId",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1068,
                    "src": "23122:11:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                ],
                "id": 1074,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1072,
                  "name": "employeeIdExists",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 273,
                  "src": "23105:16:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_uint256_$",
                    "typeString": "modifier (uint256)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "23105:29:0"
              }
            ],
            "name": "getAllocation",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1071,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1068,
                  "name": "_employeeId",
                  "nodeType": "VariableDeclaration",
                  "scope": 1086,
                  "src": "23056:19:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1067,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "23056:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1070,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 1086,
                  "src": "23077:14:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1069,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "23077:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "23055:37:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 1077,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1076,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1086,
                  "src": "23144:7:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1075,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "23144:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "23143:9:0"
            },
            "scope": 1984,
            "src": "23033:191:0",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1099,
              "nodeType": "Block",
              "src": "23514:45:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 1095,
                      "name": "allowedTokens",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 178,
                      "src": "23531:13:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                        "typeString": "mapping(address => bool)"
                      }
                    },
                    "id": 1097,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 1096,
                      "name": "_token",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1088,
                      "src": "23545:6:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "23531:21:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 1094,
                  "id": 1098,
                  "nodeType": "Return",
                  "src": "23524:28:0"
                }
              ]
            },
            "documentation": "@dev Check if a token is allowed to be used for payments\n@param _token Address of the token to be checked\n@return True if the given token is allowed, false otherwise",
            "id": 1100,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [
              {
                "arguments": null,
                "id": 1091,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1090,
                  "name": "isInitialized",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 10752,
                  "src": "23485:13:0",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "23485:13:0"
              }
            ],
            "name": "isTokenAllowed",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1089,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1088,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 1100,
                  "src": "23457:14:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1087,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "23457:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "23456:16:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 1094,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1093,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1100,
                  "src": "23508:4:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 1092,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "23508:4:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "23507:6:0"
            },
            "scope": 1984,
            "src": "23433:126:0",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1120,
              "nodeType": "Block",
              "src": "23761:123:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 1107,
                            "name": "_feed",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1102,
                            "src": "23790:5:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IFeed_$14313",
                              "typeString": "contract IFeed"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_IFeed_$14313",
                              "typeString": "contract IFeed"
                            }
                          ],
                          "id": 1106,
                          "name": "isContract",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10837,
                          "src": "23779:10:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                            "typeString": "function (address) view returns (bool)"
                          }
                        },
                        "id": 1108,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "23779:17:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1109,
                        "name": "ERROR_FEED_NOT_CONTRACT",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 115,
                        "src": "23798:23:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 1105,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        15156,
                        15157
                      ],
                      "referencedDeclaration": 15157,
                      "src": "23771:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1110,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "23771:51:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1111,
                  "nodeType": "ExpressionStatement",
                  "src": "23771:51:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1114,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1112,
                      "name": "feed",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 162,
                      "src": "23832:4:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IFeed_$14313",
                        "typeString": "contract IFeed"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 1113,
                      "name": "_feed",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1102,
                      "src": "23839:5:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IFeed_$14313",
                        "typeString": "contract IFeed"
                      }
                    },
                    "src": "23832:12:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IFeed_$14313",
                      "typeString": "contract IFeed"
                    }
                  },
                  "id": 1115,
                  "nodeType": "ExpressionStatement",
                  "src": "23832:12:0"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1117,
                        "name": "feed",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 162,
                        "src": "23872:4:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IFeed_$14313",
                          "typeString": "contract IFeed"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IFeed_$14313",
                          "typeString": "contract IFeed"
                        }
                      ],
                      "id": 1116,
                      "name": "SetPriceFeed",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 256,
                      "src": "23859:12:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 1118,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "23859:18:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1119,
                  "nodeType": "EmitStatement",
                  "src": "23854:23:0"
                }
              ]
            },
            "documentation": "@dev Set the price feed used for exchange rates\n@param _feed Address of the new price feed instance",
            "id": 1121,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "_setPriceFeed",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1103,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1102,
                  "name": "_feed",
                  "nodeType": "VariableDeclaration",
                  "scope": 1121,
                  "src": "23739:11:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IFeed_$14313",
                    "typeString": "contract IFeed"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1101,
                    "name": "IFeed",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 14313,
                    "src": "23739:5:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IFeed_$14313",
                      "typeString": "contract IFeed"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "23738:13:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 1104,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "23761:0:0"
            },
            "scope": 1984,
            "src": "23716:168:0",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1141,
              "nodeType": "Block",
              "src": "24216:218:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        },
                        "id": 1129,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 1127,
                          "name": "_time",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1123,
                          "src": "24293:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 1128,
                          "name": "MIN_RATE_EXPIRY",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 55,
                          "src": "24302:15:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "src": "24293:24:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1130,
                        "name": "ERROR_EXPIRY_TIME_TOO_SHORT",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 118,
                        "src": "24319:27:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 1126,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        15156,
                        15157
                      ],
                      "referencedDeclaration": 15157,
                      "src": "24285:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1131,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "24285:62:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1132,
                  "nodeType": "ExpressionStatement",
                  "src": "24285:62:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1135,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1133,
                      "name": "rateExpiryTime",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 164,
                      "src": "24357:14:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 1134,
                      "name": "_time",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1123,
                      "src": "24374:5:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "24357:22:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 1136,
                  "nodeType": "ExpressionStatement",
                  "src": "24357:22:0"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1138,
                        "name": "rateExpiryTime",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 164,
                        "src": "24412:14:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      ],
                      "id": 1137,
                      "name": "SetRateExpiryTime",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 260,
                      "src": "24394:17:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint64_$returns$__$",
                        "typeString": "function (uint64)"
                      }
                    },
                    "id": 1139,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "24394:33:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1140,
                  "nodeType": "EmitStatement",
                  "src": "24389:38:0"
                }
              ]
            },
            "documentation": "@dev Set the exchange rate expiry time in seconds.\n     Exchange rates older than the given value won't be accepted for payments and will cause\n     payouts to revert.\n@param _time The expiration time in seconds for exchange rates",
            "id": 1142,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "_setRateExpiryTime",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1124,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1123,
                  "name": "_time",
                  "nodeType": "VariableDeclaration",
                  "scope": 1142,
                  "src": "24193:12:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 1122,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "24193:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "24192:14:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 1125,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "24216:0:0"
            },
            "scope": 1984,
            "src": "24165:269:0",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1195,
              "nodeType": "Block",
              "src": "24886:427:0",
              "statements": [
                {
                  "assignments": [
                    1154
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1154,
                      "name": "employeeId",
                      "nodeType": "VariableDeclaration",
                      "scope": 1196,
                      "src": "24896:18:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1153,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "24896:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1157,
                  "initialValue": {
                    "argumentTypes": null,
                    "id": 1156,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "++",
                    "prefix": false,
                    "src": "24917:14:0",
                    "subExpression": {
                      "argumentTypes": null,
                      "id": 1155,
                      "name": "nextEmployee",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 166,
                      "src": "24917:12:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "24896:35:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1159,
                        "name": "employeeId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1154,
                        "src": "24962:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1160,
                        "name": "_accountAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1144,
                        "src": "24974:15:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 1158,
                      "name": "_setEmployeeAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1324,
                      "src": "24942:19:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_address_$returns$__$",
                        "typeString": "function (uint256,address)"
                      }
                    },
                    "id": 1161,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "24942:48:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1162,
                  "nodeType": "ExpressionStatement",
                  "src": "24942:48:0"
                },
                {
                  "assignments": [
                    1164
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1164,
                      "name": "employee",
                      "nodeType": "VariableDeclaration",
                      "scope": 1196,
                      "src": "25001:25:0",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                        "typeString": "struct Payroll.Employee"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 1163,
                        "name": "Employee",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 156,
                        "src": "25001:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                          "typeString": "struct Payroll.Employee"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1168,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 1165,
                      "name": "employees",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 170,
                      "src": "25029:9:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Employee_$156_storage_$",
                        "typeString": "mapping(uint256 => struct Payroll.Employee storage ref)"
                      }
                    },
                    "id": 1167,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 1166,
                      "name": "employeeId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1154,
                      "src": "25039:10:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "25029:21:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Employee_$156_storage",
                      "typeString": "struct Payroll.Employee storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "25001:49:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1173,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1169,
                        "name": "employee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1164,
                        "src": "25060:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                          "typeString": "struct Payroll.Employee storage pointer"
                        }
                      },
                      "id": 1171,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "denominationTokenSalary",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 138,
                      "src": "25060:32:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 1172,
                      "name": "_initialDenominationSalary",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1146,
                      "src": "25095:26:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "25060:61:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1174,
                  "nodeType": "ExpressionStatement",
                  "src": "25060:61:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1179,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1175,
                        "name": "employee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1164,
                        "src": "25131:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                          "typeString": "struct Payroll.Employee storage pointer"
                        }
                      },
                      "id": 1177,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "lastPayroll",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 146,
                      "src": "25131:20:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 1178,
                      "name": "_startDate",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1148,
                      "src": "25154:10:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "25131:33:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 1180,
                  "nodeType": "ExpressionStatement",
                  "src": "25131:33:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1185,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1181,
                        "name": "employee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1164,
                        "src": "25174:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                          "typeString": "struct Payroll.Employee storage pointer"
                        }
                      },
                      "id": 1183,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "endDate",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 148,
                      "src": "25174:16:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 1184,
                      "name": "MAX_UINT64",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 67,
                      "src": "25193:10:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "25174:29:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 1186,
                  "nodeType": "ExpressionStatement",
                  "src": "25174:29:0"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1188,
                        "name": "employeeId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1154,
                        "src": "25231:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1189,
                        "name": "_accountAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1144,
                        "src": "25243:15:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1190,
                        "name": "_initialDenominationSalary",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1146,
                        "src": "25260:26:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1191,
                        "name": "_startDate",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1148,
                        "src": "25288:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1192,
                        "name": "_role",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1150,
                        "src": "25300:5:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 1187,
                      "name": "AddEmployee",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 190,
                      "src": "25219:11:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_address_$_t_uint256_$_t_uint64_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (uint256,address,uint256,uint64,string memory)"
                      }
                    },
                    "id": 1193,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "25219:87:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1194,
                  "nodeType": "EmitStatement",
                  "src": "25214:92:0"
                }
              ]
            },
            "documentation": "@dev Add a new employee to Payroll\n@param _accountAddress Employee's address to receive payroll\n@param _initialDenominationSalary Employee's salary, per second in denomination token\n@param _startDate Employee's starting timestamp in seconds\n@param _role Employee's role",
            "id": 1196,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "_addEmployee",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1151,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1144,
                  "name": "_accountAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 1196,
                  "src": "24783:23:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1143,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "24783:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1146,
                  "name": "_initialDenominationSalary",
                  "nodeType": "VariableDeclaration",
                  "scope": 1196,
                  "src": "24808:34:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1145,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "24808:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1148,
                  "name": "_startDate",
                  "nodeType": "VariableDeclaration",
                  "scope": 1196,
                  "src": "24844:17:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 1147,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "24844:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1150,
                  "name": "_role",
                  "nodeType": "VariableDeclaration",
                  "scope": 1196,
                  "src": "24863:12:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 1149,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "24863:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "24782:94:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 1152,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "24886:0:0"
            },
            "scope": 1984,
            "src": "24761:552:0",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1224,
              "nodeType": "Block",
              "src": "25583:174:0",
              "statements": [
                {
                  "assignments": [
                    1204
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1204,
                      "name": "employee",
                      "nodeType": "VariableDeclaration",
                      "scope": 1225,
                      "src": "25593:25:0",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                        "typeString": "struct Payroll.Employee"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 1203,
                        "name": "Employee",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 156,
                        "src": "25593:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                          "typeString": "struct Payroll.Employee"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1208,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 1205,
                      "name": "employees",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 170,
                      "src": "25621:9:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Employee_$156_storage_$",
                        "typeString": "mapping(uint256 => struct Payroll.Employee storage ref)"
                      }
                    },
                    "id": 1207,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 1206,
                      "name": "_employeeId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1198,
                      "src": "25631:11:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "25621:22:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Employee_$156_storage",
                      "typeString": "struct Payroll.Employee storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "25593:50:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1217,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1209,
                        "name": "employee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1204,
                        "src": "25653:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                          "typeString": "struct Payroll.Employee storage pointer"
                        }
                      },
                      "id": 1211,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "bonus",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 142,
                      "src": "25653:14:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 1215,
                          "name": "_amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1200,
                          "src": "25689:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 1212,
                            "name": "employee",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1204,
                            "src": "25670:8:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                              "typeString": "struct Payroll.Employee storage pointer"
                            }
                          },
                          "id": 1213,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "bonus",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 142,
                          "src": "25670:14:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1214,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "add",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 14042,
                        "src": "25670:18:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                          "typeString": "function (uint256,uint256) pure returns (uint256)"
                        }
                      },
                      "id": 1216,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "25670:27:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "25653:44:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1218,
                  "nodeType": "ExpressionStatement",
                  "src": "25653:44:0"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1220,
                        "name": "_employeeId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1198,
                        "src": "25729:11:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1221,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1200,
                        "src": "25742:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 1219,
                      "name": "AddEmployeeBonus",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 214,
                      "src": "25712:16:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (uint256,uint256)"
                      }
                    },
                    "id": 1222,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "25712:38:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1223,
                  "nodeType": "EmitStatement",
                  "src": "25707:43:0"
                }
              ]
            },
            "documentation": "@dev Add amount to an employee's bonuses\n@param _employeeId Employee's identifier\n@param _amount Amount be added to the employee's bonuses in denomination token",
            "id": 1225,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "_addBonus",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1201,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1198,
                  "name": "_employeeId",
                  "nodeType": "VariableDeclaration",
                  "scope": 1225,
                  "src": "25536:19:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1197,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "25536:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1200,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 1225,
                  "src": "25557:15:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1199,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "25557:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "25535:38:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 1202,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "25583:0:0"
            },
            "scope": 1984,
            "src": "25517:240:0",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1253,
              "nodeType": "Block",
              "src": "26049:200:0",
              "statements": [
                {
                  "assignments": [
                    1233
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1233,
                      "name": "employee",
                      "nodeType": "VariableDeclaration",
                      "scope": 1254,
                      "src": "26059:25:0",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                        "typeString": "struct Payroll.Employee"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 1232,
                        "name": "Employee",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 156,
                        "src": "26059:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                          "typeString": "struct Payroll.Employee"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1237,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 1234,
                      "name": "employees",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 170,
                      "src": "26087:9:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Employee_$156_storage_$",
                        "typeString": "mapping(uint256 => struct Payroll.Employee storage ref)"
                      }
                    },
                    "id": 1236,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 1235,
                      "name": "_employeeId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1227,
                      "src": "26097:11:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "26087:22:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Employee_$156_storage",
                      "typeString": "struct Payroll.Employee storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "26059:50:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1246,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1238,
                        "name": "employee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1233,
                        "src": "26119:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                          "typeString": "struct Payroll.Employee storage pointer"
                        }
                      },
                      "id": 1240,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "reimbursements",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 144,
                      "src": "26119:23:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 1244,
                          "name": "_amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1229,
                          "src": "26173:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 1241,
                            "name": "employee",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1233,
                            "src": "26145:8:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                              "typeString": "struct Payroll.Employee storage pointer"
                            }
                          },
                          "id": 1242,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "reimbursements",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 144,
                          "src": "26145:23:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1243,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "add",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 14042,
                        "src": "26145:27:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                          "typeString": "function (uint256,uint256) pure returns (uint256)"
                        }
                      },
                      "id": 1245,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "26145:36:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "26119:62:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1247,
                  "nodeType": "ExpressionStatement",
                  "src": "26119:62:0"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1249,
                        "name": "_employeeId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1227,
                        "src": "26221:11:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1250,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1229,
                        "src": "26234:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 1248,
                      "name": "AddEmployeeReimbursement",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 220,
                      "src": "26196:24:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (uint256,uint256)"
                      }
                    },
                    "id": 1251,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "26196:46:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1252,
                  "nodeType": "EmitStatement",
                  "src": "26191:51:0"
                }
              ]
            },
            "documentation": "@dev Add amount to an employee's reimbursements\n@param _employeeId Employee's identifier\n@param _amount Amount be added to the employee's reimbursements in denomination token",
            "id": 1254,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "_addReimbursement",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1230,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1227,
                  "name": "_employeeId",
                  "nodeType": "VariableDeclaration",
                  "scope": 1254,
                  "src": "26002:19:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1226,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "26002:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1229,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 1254,
                  "src": "26023:15:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1228,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "26023:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "26001:38:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 1231,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "26049:0:0"
            },
            "scope": 1984,
            "src": "25975:274:0",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1282,
              "nodeType": "Block",
              "src": "26541:198:0",
              "statements": [
                {
                  "assignments": [
                    1262
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1262,
                      "name": "employee",
                      "nodeType": "VariableDeclaration",
                      "scope": 1283,
                      "src": "26551:25:0",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                        "typeString": "struct Payroll.Employee"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 1261,
                        "name": "Employee",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 156,
                        "src": "26551:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                          "typeString": "struct Payroll.Employee"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1266,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 1263,
                      "name": "employees",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 170,
                      "src": "26579:9:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Employee_$156_storage_$",
                        "typeString": "mapping(uint256 => struct Payroll.Employee storage ref)"
                      }
                    },
                    "id": 1265,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 1264,
                      "name": "_employeeId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1256,
                      "src": "26589:11:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "26579:22:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Employee_$156_storage",
                      "typeString": "struct Payroll.Employee storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "26551:50:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1275,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1267,
                        "name": "employee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1262,
                        "src": "26611:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                          "typeString": "struct Payroll.Employee storage pointer"
                        }
                      },
                      "id": 1269,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "accruedSalary",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 140,
                      "src": "26611:22:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 1273,
                          "name": "_amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1258,
                          "src": "26663:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 1270,
                            "name": "employee",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1262,
                            "src": "26636:8:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                              "typeString": "struct Payroll.Employee storage pointer"
                            }
                          },
                          "id": 1271,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "accruedSalary",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 140,
                          "src": "26636:22:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1272,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "add",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 14042,
                        "src": "26636:26:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                          "typeString": "function (uint256,uint256) pure returns (uint256)"
                        }
                      },
                      "id": 1274,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "26636:35:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "26611:60:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1276,
                  "nodeType": "ExpressionStatement",
                  "src": "26611:60:0"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1278,
                        "name": "_employeeId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1256,
                        "src": "26711:11:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1279,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1258,
                        "src": "26724:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 1277,
                      "name": "AddEmployeeAccruedSalary",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 208,
                      "src": "26686:24:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (uint256,uint256)"
                      }
                    },
                    "id": 1280,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "26686:46:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1281,
                  "nodeType": "EmitStatement",
                  "src": "26681:51:0"
                }
              ]
            },
            "documentation": "@dev Add amount to an employee's accrued salary\n@param _employeeId Employee's identifier\n@param _amount Amount be added to the employee's accrued salary in denomination token",
            "id": 1283,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "_addAccruedSalary",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1259,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1256,
                  "name": "_employeeId",
                  "nodeType": "VariableDeclaration",
                  "scope": 1283,
                  "src": "26494:19:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1255,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "26494:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1258,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 1283,
                  "src": "26515:15:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1257,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "26515:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "26493:38:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 1260,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "26541:0:0"
            },
            "scope": 1984,
            "src": "26467:272:0",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1323,
              "nodeType": "Block",
              "src": "27007:411:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 1295,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 1291,
                          "name": "_accountAddress",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1287,
                          "src": "27062:15:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 1293,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "27089:1:0",
                              "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": 1292,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "27081:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 1294,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "27081:10:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "27062:29:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1296,
                        "name": "ERROR_EMPLOYEE_NULL_ADDRESS",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 109,
                        "src": "27093:27:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 1290,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        15156,
                        15157
                      ],
                      "referencedDeclaration": 15157,
                      "src": "27054:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1297,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "27054:67:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1298,
                  "nodeType": "ExpressionStatement",
                  "src": "27054:67:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 1306,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 1300,
                            "name": "employeeIds",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 174,
                            "src": "27189:11:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 1302,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 1301,
                            "name": "_accountAddress",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1287,
                            "src": "27201:15:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "27189:28:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 1304,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "27229:1:0",
                              "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": 1303,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "27221:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint256_$",
                              "typeString": "type(uint256)"
                            },
                            "typeName": "uint256"
                          },
                          "id": 1305,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "27221:10:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "27189:42:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1307,
                        "name": "ERROR_EMPLOYEE_ALREADY_EXIST",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 112,
                        "src": "27233:28:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 1299,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        15156,
                        15157
                      ],
                      "referencedDeclaration": 15157,
                      "src": "27181:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1308,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "27181:81:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1309,
                  "nodeType": "ExpressionStatement",
                  "src": "27181:81:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1315,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 1310,
                          "name": "employees",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 170,
                          "src": "27273:9:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Employee_$156_storage_$",
                            "typeString": "mapping(uint256 => struct Payroll.Employee storage ref)"
                          }
                        },
                        "id": 1312,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 1311,
                          "name": "_employeeId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1285,
                          "src": "27283:11:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "27273:22:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Employee_$156_storage",
                          "typeString": "struct Payroll.Employee storage ref"
                        }
                      },
                      "id": 1313,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "accountAddress",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 136,
                      "src": "27273:37:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 1314,
                      "name": "_accountAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1287,
                      "src": "27313:15:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "27273:55:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 1316,
                  "nodeType": "ExpressionStatement",
                  "src": "27273:55:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1321,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 1317,
                        "name": "employeeIds",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 174,
                        "src": "27369:11:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 1319,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 1318,
                        "name": "_accountAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1287,
                        "src": "27381:15:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "27369:28:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 1320,
                      "name": "_employeeId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1285,
                      "src": "27400:11:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "27369:42:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1322,
                  "nodeType": "ExpressionStatement",
                  "src": "27369:42:0"
                }
              ]
            },
            "documentation": "@dev Set an employee's account address\n@param _employeeId Employee's identifier\n@param _accountAddress Employee's address to receive payroll",
            "id": 1324,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "_setEmployeeAddress",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1288,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1285,
                  "name": "_employeeId",
                  "nodeType": "VariableDeclaration",
                  "scope": 1324,
                  "src": "26952:19:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1284,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "26952:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1287,
                  "name": "_accountAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 1324,
                  "src": "26973:23:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1286,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "26973:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "26951:46:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 1289,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "27007:0:0"
            },
            "scope": 1984,
            "src": "26923:495:0",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1351,
              "nodeType": "Block",
              "src": "27662:231:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        },
                        "id": 1335,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 1332,
                          "name": "_endDate",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1328,
                          "src": "27722:8:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 1333,
                            "name": "getTimestamp64",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11199,
                            "src": "27734:14:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$_t_uint64_$",
                              "typeString": "function () view returns (uint64)"
                            }
                          },
                          "id": 1334,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "27734:16:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "src": "27722:28:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1336,
                        "name": "ERROR_PAST_TERMINATION_DATE",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 121,
                        "src": "27752:27:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 1331,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        15156,
                        15157
                      ],
                      "referencedDeclaration": 15157,
                      "src": "27714:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1337,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "27714:66:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1338,
                  "nodeType": "ExpressionStatement",
                  "src": "27714:66:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1344,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 1339,
                          "name": "employees",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 170,
                          "src": "27790:9:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Employee_$156_storage_$",
                            "typeString": "mapping(uint256 => struct Payroll.Employee storage ref)"
                          }
                        },
                        "id": 1341,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 1340,
                          "name": "_employeeId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1326,
                          "src": "27800:11:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "27790:22:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Employee_$156_storage",
                          "typeString": "struct Payroll.Employee storage ref"
                        }
                      },
                      "id": 1342,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "endDate",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 148,
                      "src": "27790:30:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 1343,
                      "name": "_endDate",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1328,
                      "src": "27823:8:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "27790:41:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 1345,
                  "nodeType": "ExpressionStatement",
                  "src": "27790:41:0"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1347,
                        "name": "_employeeId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1326,
                        "src": "27864:11:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1348,
                        "name": "_endDate",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1328,
                        "src": "27877:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      ],
                      "id": 1346,
                      "name": "TerminateEmployee",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 196,
                      "src": "27846:17:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_uint64_$returns$__$",
                        "typeString": "function (uint256,uint64)"
                      }
                    },
                    "id": 1349,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "27846:40:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1350,
                  "nodeType": "EmitStatement",
                  "src": "27841:45:0"
                }
              ]
            },
            "documentation": "@dev Terminate employee on end date\n@param _employeeId Employee's identifier\n@param _endDate Termination timestamp in seconds",
            "id": 1352,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "_terminateEmployee",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1329,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1326,
                  "name": "_employeeId",
                  "nodeType": "VariableDeclaration",
                  "scope": 1352,
                  "src": "27615:19:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1325,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "27615:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1328,
                  "name": "_endDate",
                  "nodeType": "VariableDeclaration",
                  "scope": 1352,
                  "src": "27636:15:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 1327,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "27636:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "27614:38:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 1330,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "27662:0:0"
            },
            "scope": 1984,
            "src": "27587:306:0",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1497,
              "nodeType": "Block",
              "src": "28605:1670:0",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1368,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 1366,
                      "name": "_totalAmount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1358,
                      "src": "28619:12:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 1367,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "28635:1:0",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "28619:17:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1372,
                  "nodeType": "IfStatement",
                  "src": "28615:60:0",
                  "trueBody": {
                    "id": 1371,
                    "nodeType": "Block",
                    "src": "28638:37:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "66616c7365",
                          "id": 1369,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "28659:5:0",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "false"
                        },
                        "functionReturnParameters": 1365,
                        "id": 1370,
                        "nodeType": "Return",
                        "src": "28652:12:0"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    1374
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1374,
                      "name": "employee",
                      "nodeType": "VariableDeclaration",
                      "scope": 1498,
                      "src": "28685:25:0",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                        "typeString": "struct Payroll.Employee"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 1373,
                        "name": "Employee",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 156,
                        "src": "28685:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                          "typeString": "struct Payroll.Employee"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1378,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 1375,
                      "name": "employees",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 170,
                      "src": "28713:9:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Employee_$156_storage_$",
                        "typeString": "mapping(uint256 => struct Payroll.Employee storage ref)"
                      }
                    },
                    "id": 1377,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 1376,
                      "name": "_employeeId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1354,
                      "src": "28723:11:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "28713:22:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Employee_$156_storage",
                      "typeString": "struct Payroll.Employee storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "28685:50:0"
                },
                {
                  "assignments": [
                    1380
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1380,
                      "name": "employeeAddress",
                      "nodeType": "VariableDeclaration",
                      "scope": 1498,
                      "src": "28745:23:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 1379,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "28745:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1383,
                  "initialValue": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 1381,
                      "name": "employee",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1374,
                      "src": "28771:8:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                        "typeString": "struct Payroll.Employee storage pointer"
                      }
                    },
                    "id": 1382,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "accountAddress",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 136,
                    "src": "28771:23:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "28745:49:0"
                },
                {
                  "assignments": [
                    1385
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1385,
                      "name": "paymentReference",
                      "nodeType": "VariableDeclaration",
                      "scope": 1498,
                      "src": "28804:30:0",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string"
                      },
                      "typeName": {
                        "id": 1384,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "28804:6:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage_ptr",
                          "typeString": "string"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1389,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1387,
                        "name": "_type",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1356,
                        "src": "28858:5:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_PaymentType_$134",
                          "typeString": "enum Payroll.PaymentType"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_enum$_PaymentType_$134",
                          "typeString": "enum Payroll.PaymentType"
                        }
                      ],
                      "id": 1386,
                      "name": "_paymentReferenceFor",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1952,
                      "src": "28837:20:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_enum$_PaymentType_$134_$returns$_t_string_memory_ptr_$",
                        "typeString": "function (enum Payroll.PaymentType) pure returns (string memory)"
                      }
                    },
                    "id": 1388,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "28837:27:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_memory_ptr",
                      "typeString": "string memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "28804:60:0"
                },
                {
                  "assignments": [
                    1393
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1393,
                      "name": "allocationTokenAddresses",
                      "nodeType": "VariableDeclaration",
                      "scope": 1498,
                      "src": "28875:42:0",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                        "typeString": "address[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 1391,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "28875:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 1392,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "28875:9:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                          "typeString": "address[]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1396,
                  "initialValue": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 1394,
                      "name": "employee",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1374,
                      "src": "28920:8:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                        "typeString": "struct Payroll.Employee storage pointer"
                      }
                    },
                    "id": 1395,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "allocationTokenAddresses",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 151,
                    "src": "28920:33:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage",
                      "typeString": "address[] storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "28875:78:0"
                },
                {
                  "body": {
                    "id": 1495,
                    "nodeType": "Block",
                    "src": "29025:1244:0",
                    "statements": [
                      {
                        "assignments": [
                          1409
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1409,
                            "name": "token",
                            "nodeType": "VariableDeclaration",
                            "scope": 1498,
                            "src": "29039:13:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "typeName": {
                              "id": 1408,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "29039:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 1413,
                        "initialValue": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 1410,
                            "name": "allocationTokenAddresses",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1393,
                            "src": "29055:24:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                              "typeString": "address[] storage pointer"
                            }
                          },
                          "id": 1412,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 1411,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1398,
                            "src": "29080:1:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "29055:27:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "29039:43:0"
                      },
                      {
                        "assignments": [
                          1415
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1415,
                            "name": "tokenAllocation",
                            "nodeType": "VariableDeclaration",
                            "scope": 1498,
                            "src": "29096:23:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 1414,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "29096:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 1420,
                        "initialValue": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 1416,
                              "name": "employee",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1374,
                              "src": "29122:8:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                                "typeString": "struct Payroll.Employee storage pointer"
                              }
                            },
                            "id": 1417,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "allocationTokens",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 155,
                            "src": "29122:25:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 1419,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 1418,
                            "name": "token",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1409,
                            "src": "29148:5:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "29122:32:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "29096:58:0"
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1425,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 1421,
                            "name": "tokenAllocation",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1415,
                            "src": "29172:15:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 1423,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "29199:1:0",
                                "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": 1422,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "29191:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_uint256_$",
                                "typeString": "type(uint256)"
                              },
                              "typeName": "uint256"
                            },
                            "id": 1424,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "29191:10:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "29172:29:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 1494,
                        "nodeType": "IfStatement",
                        "src": "29168:1091:0",
                        "trueBody": {
                          "id": 1493,
                          "nodeType": "Block",
                          "src": "29203:1056:0",
                          "statements": [
                            {
                              "assignments": [
                                1427
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 1427,
                                  "name": "exchangeRate",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 1498,
                                  "src": "29368:20:0",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "typeName": {
                                    "id": 1426,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "29368:7:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                }
                              ],
                              "id": 1431,
                              "initialValue": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 1429,
                                    "name": "token",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1409,
                                    "src": "29427:5:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "id": 1428,
                                  "name": "_getExchangeRateInDenominationToken",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1796,
                                  "src": "29391:35:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
                                    "typeString": "function (address) view returns (uint256)"
                                  }
                                },
                                "id": 1430,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "29391:42:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "29368:65:0"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "condition": {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 1436,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "argumentTypes": null,
                                        "expression": {
                                          "argumentTypes": null,
                                          "id": 1433,
                                          "name": "_minRates",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1361,
                                          "src": "29459:9:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                            "typeString": "uint256[] memory"
                                          }
                                        },
                                        "id": 1434,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "length",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": null,
                                        "src": "29459:16:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": ">",
                                      "rightExpression": {
                                        "argumentTypes": null,
                                        "hexValue": "30",
                                        "id": 1435,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "29478:1:0",
                                        "subdenomination": null,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_0_by_1",
                                          "typeString": "int_const 0"
                                        },
                                        "value": "0"
                                      },
                                      "src": "29459:20:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "falseExpression": {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 1444,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "argumentTypes": null,
                                        "id": 1442,
                                        "name": "exchangeRate",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1427,
                                        "src": "29513:12:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": ">",
                                      "rightExpression": {
                                        "argumentTypes": null,
                                        "hexValue": "30",
                                        "id": 1443,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "29528:1:0",
                                        "subdenomination": null,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_0_by_1",
                                          "typeString": "int_const 0"
                                        },
                                        "value": "0"
                                      },
                                      "src": "29513:16:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "id": 1445,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "Conditional",
                                    "src": "29459:70:0",
                                    "trueExpression": {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 1441,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "argumentTypes": null,
                                        "id": 1437,
                                        "name": "exchangeRate",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1427,
                                        "src": "29482:12:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": ">=",
                                      "rightExpression": {
                                        "argumentTypes": null,
                                        "baseExpression": {
                                          "argumentTypes": null,
                                          "id": 1438,
                                          "name": "_minRates",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1361,
                                          "src": "29498:9:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                            "typeString": "uint256[] memory"
                                          }
                                        },
                                        "id": 1440,
                                        "indexExpression": {
                                          "argumentTypes": null,
                                          "id": 1439,
                                          "name": "i",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1398,
                                          "src": "29508:1:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "29498:12:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "29482:28:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 1446,
                                    "name": "ERROR_EXCHANGE_RATE_TOO_LOW",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 124,
                                    "src": "29531:27:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_string_memory",
                                      "typeString": "string memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    },
                                    {
                                      "typeIdentifier": "t_string_memory",
                                      "typeString": "string memory"
                                    }
                                  ],
                                  "id": 1432,
                                  "name": "require",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [
                                    15156,
                                    15157
                                  ],
                                  "referencedDeclaration": 15157,
                                  "src": "29451:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                    "typeString": "function (bool,string memory) pure"
                                  }
                                },
                                "id": 1447,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "29451:108:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 1448,
                              "nodeType": "ExpressionStatement",
                              "src": "29451:108:0"
                            },
                            {
                              "assignments": [
                                1450
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 1450,
                                  "name": "tokenAmount",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 1498,
                                  "src": "29674:19:0",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "typeName": {
                                    "id": 1449,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "29674:7:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                }
                              ],
                              "id": 1458,
                              "initialValue": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 1456,
                                    "name": "tokenAllocation",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1415,
                                    "src": "29731:15:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "id": 1453,
                                        "name": "exchangeRate",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1427,
                                        "src": "29713:12:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 1451,
                                        "name": "_totalAmount",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1358,
                                        "src": "29696:12:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "id": 1452,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "mul",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 13967,
                                      "src": "29696:16:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                                      }
                                    },
                                    "id": 1454,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "29696:30:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 1455,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "mul",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 13967,
                                  "src": "29696:34:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                    "typeString": "function (uint256,uint256) pure returns (uint256)"
                                  }
                                },
                                "id": 1457,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "29696:51:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "29674:73:0"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 1469,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 1459,
                                  "name": "tokenAmount",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1450,
                                  "src": "29863:11:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "arguments": [],
                                      "expression": {
                                        "argumentTypes": [],
                                        "expression": {
                                          "argumentTypes": null,
                                          "id": 1465,
                                          "name": "feed",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 162,
                                          "src": "29902:4:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_contract$_IFeed_$14313",
                                            "typeString": "contract IFeed"
                                          }
                                        },
                                        "id": 1466,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "ratePrecision",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 14301,
                                        "src": "29902:18:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_external_pure$__$returns$_t_uint256_$",
                                          "typeString": "function () pure external returns (uint256)"
                                        }
                                      },
                                      "id": 1467,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "29902:20:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": null,
                                      "arguments": [
                                        {
                                          "argumentTypes": null,
                                          "hexValue": "313030",
                                          "id": 1462,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "kind": "number",
                                          "lValueRequested": false,
                                          "nodeType": "Literal",
                                          "src": "29893:3:0",
                                          "subdenomination": null,
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_rational_100_by_1",
                                            "typeString": "int_const 100"
                                          },
                                          "value": "100"
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_rational_100_by_1",
                                            "typeString": "int_const 100"
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": null,
                                          "id": 1460,
                                          "name": "tokenAmount",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1450,
                                          "src": "29877:11:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "id": 1461,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "div",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 13992,
                                        "src": "29877:15:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                          "typeString": "function (uint256,uint256) pure returns (uint256)"
                                        }
                                      },
                                      "id": 1463,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "29877:20:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 1464,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "div",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 13992,
                                    "src": "29877:24:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                      "typeString": "function (uint256,uint256) pure returns (uint256)"
                                    }
                                  },
                                  "id": 1468,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "29877:46:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "29863:60:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 1470,
                              "nodeType": "ExpressionStatement",
                              "src": "29863:60:0"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 1474,
                                    "name": "token",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1409,
                                    "src": "30036:5:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 1475,
                                    "name": "employeeAddress",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1380,
                                    "src": "30043:15:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 1476,
                                    "name": "tokenAmount",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1450,
                                    "src": "30060:11:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 1477,
                                    "name": "paymentReference",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1385,
                                    "src": "30073:16:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 1471,
                                    "name": "finance",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 158,
                                    "src": "30008:7:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_Finance_$5528",
                                      "typeString": "contract Finance"
                                    }
                                  },
                                  "id": 1473,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "newImmediatePayment",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 4002,
                                  "src": "30008:27:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_string_memory_ptr_$returns$__$",
                                    "typeString": "function (address,address,uint256,string memory) external"
                                  }
                                },
                                "id": 1478,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "30008:82:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 1479,
                              "nodeType": "ExpressionStatement",
                              "src": "30008:82:0"
                            },
                            {
                              "eventCall": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 1481,
                                    "name": "_employeeId",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1354,
                                    "src": "30125:11:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 1482,
                                    "name": "employeeAddress",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1380,
                                    "src": "30138:15:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 1483,
                                    "name": "token",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1409,
                                    "src": "30155:5:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 1484,
                                    "name": "tokenAmount",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1450,
                                    "src": "30162:11:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 1485,
                                    "name": "exchangeRate",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1427,
                                    "src": "30175:12:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 1486,
                                    "name": "paymentReference",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1385,
                                    "src": "30189:16:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  ],
                                  "id": 1480,
                                  "name": "SendPayment",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 246,
                                  "src": "30113:11:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_string_memory_ptr_$returns$__$",
                                    "typeString": "function (uint256,address,address,uint256,uint256,string memory)"
                                  }
                                },
                                "id": 1487,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "30113:93:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 1488,
                              "nodeType": "EmitStatement",
                              "src": "30108:98:0"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 1491,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 1489,
                                  "name": "somethingPaid",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1364,
                                  "src": "30224:13:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "hexValue": "74727565",
                                  "id": 1490,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "bool",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "30240:4:0",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  },
                                  "value": "true"
                                },
                                "src": "30224:20:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 1492,
                              "nodeType": "ExpressionStatement",
                              "src": "30224:20:0"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1404,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 1401,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1398,
                      "src": "28983:1:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1402,
                        "name": "allocationTokenAddresses",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1393,
                        "src": "28987:24:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                          "typeString": "address[] storage pointer"
                        }
                      },
                      "id": 1403,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "28987:31:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "28983:35:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 1496,
                  "initializationExpression": {
                    "assignments": [
                      1398
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 1398,
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "scope": 1498,
                        "src": "28968:9:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1397,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "28968:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 1400,
                    "initialValue": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 1399,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "28980:1:0",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "28968:13:0"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 1406,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "29020:3:0",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 1405,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1398,
                        "src": "29020:1:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 1407,
                    "nodeType": "ExpressionStatement",
                    "src": "29020:3:0"
                  },
                  "nodeType": "ForStatement",
                  "src": "28963:1306:0"
                }
              ]
            },
            "documentation": "@dev Loop over allowed tokens to send requested amount to the employee in their desired allocation\n@param _employeeId Employee's identifier\n@param _totalAmount Total amount to be transferred to the employee distributed in accordance to the employee's token allocation.\n@param _type Payment type being transferred (Payroll, Reimbursement or Bonus)\n@param _minRates Array of employee's minimum acceptable rates for their allowed payment tokens\n@return True if there was at least one token transfer",
            "id": 1498,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "_transferTokensAmount",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1362,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1354,
                  "name": "_employeeId",
                  "nodeType": "VariableDeclaration",
                  "scope": 1498,
                  "src": "28484:19:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1353,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "28484:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1356,
                  "name": "_type",
                  "nodeType": "VariableDeclaration",
                  "scope": 1498,
                  "src": "28505:17:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_PaymentType_$134",
                    "typeString": "enum Payroll.PaymentType"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1355,
                    "name": "PaymentType",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 134,
                    "src": "28505:11:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_PaymentType_$134",
                      "typeString": "enum Payroll.PaymentType"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1358,
                  "name": "_totalAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 1498,
                  "src": "28524:20:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1357,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "28524:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1361,
                  "name": "_minRates",
                  "nodeType": "VariableDeclaration",
                  "scope": 1498,
                  "src": "28546:19:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 1359,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "28546:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 1360,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "28546:9:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "28483:83:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 1365,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1364,
                  "name": "somethingPaid",
                  "nodeType": "VariableDeclaration",
                  "scope": 1498,
                  "src": "28585:18:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 1363,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "28585:4:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "28584:20:0"
            },
            "scope": 1984,
            "src": "28453:1822:0",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1543,
              "nodeType": "Block",
              "src": "30518:356:0",
              "statements": [
                {
                  "assignments": [
                    1504
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1504,
                      "name": "employee",
                      "nodeType": "VariableDeclaration",
                      "scope": 1544,
                      "src": "30528:25:0",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                        "typeString": "struct Payroll.Employee"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 1503,
                        "name": "Employee",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 156,
                        "src": "30528:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                          "typeString": "struct Payroll.Employee"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1508,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 1505,
                      "name": "employees",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 170,
                      "src": "30556:9:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Employee_$156_storage_$",
                        "typeString": "mapping(uint256 => struct Payroll.Employee storage ref)"
                      }
                    },
                    "id": 1507,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 1506,
                      "name": "_employeeId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1500,
                      "src": "30566:11:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "30556:22:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Employee_$156_storage",
                      "typeString": "struct Payroll.Employee storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "30528:50:0"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 1529,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      },
                      "id": 1513,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 1509,
                          "name": "employee",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1504,
                          "src": "30606:8:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                            "typeString": "struct Payroll.Employee storage pointer"
                          }
                        },
                        "id": 1510,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "lastPayroll",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 146,
                        "src": "30606:20:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 1511,
                          "name": "employee",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1504,
                          "src": "30630:8:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                            "typeString": "struct Payroll.Employee storage pointer"
                          }
                        },
                        "id": 1512,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "endDate",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 148,
                        "src": "30630:16:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "src": "30606:40:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 1527,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "id": 1522,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 1517,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 1514,
                                  "name": "employee",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1504,
                                  "src": "30663:8:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                                    "typeString": "struct Payroll.Employee storage pointer"
                                  }
                                },
                                "id": 1515,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "accruedSalary",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 140,
                                "src": "30663:22:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 1516,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "30689:1:0",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "30663:27:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "&&",
                            "rightExpression": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 1521,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 1518,
                                  "name": "employee",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1504,
                                  "src": "30694:8:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                                    "typeString": "struct Payroll.Employee storage pointer"
                                  }
                                },
                                "id": 1519,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "bonus",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 142,
                                "src": "30694:14:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 1520,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "30712:1:0",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "30694:19:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "src": "30663:50:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "&&",
                          "rightExpression": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 1526,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 1523,
                                "name": "employee",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1504,
                                "src": "30717:8:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                                  "typeString": "struct Payroll.Employee storage pointer"
                                }
                              },
                              "id": 1524,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "reimbursements",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 144,
                              "src": "30717:23:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "==",
                            "rightExpression": {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 1525,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "30744:1:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            "src": "30717:28:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "30663:82:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        }
                      ],
                      "id": 1528,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "30662:84:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "30606:140:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1542,
                  "nodeType": "IfStatement",
                  "src": "30589:279:0",
                  "trueBody": {
                    "id": 1541,
                    "nodeType": "Block",
                    "src": "30757:111:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1534,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "delete",
                          "prefix": true,
                          "src": "30771:43:0",
                          "subExpression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 1530,
                              "name": "employeeIds",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 174,
                              "src": "30778:11:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 1533,
                            "indexExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 1531,
                                "name": "employee",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1504,
                                "src": "30790:8:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                                  "typeString": "struct Payroll.Employee storage pointer"
                                }
                              },
                              "id": 1532,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "accountAddress",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 136,
                              "src": "30790:23:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "30778:36:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1535,
                        "nodeType": "ExpressionStatement",
                        "src": "30771:43:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1539,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "delete",
                          "prefix": true,
                          "src": "30828:29:0",
                          "subExpression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 1536,
                              "name": "employees",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 170,
                              "src": "30835:9:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Employee_$156_storage_$",
                                "typeString": "mapping(uint256 => struct Payroll.Employee storage ref)"
                              }
                            },
                            "id": 1538,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 1537,
                              "name": "_employeeId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1500,
                              "src": "30845:11:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "30835:22:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Employee_$156_storage",
                              "typeString": "struct Payroll.Employee storage ref"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1540,
                        "nodeType": "ExpressionStatement",
                        "src": "30828:29:0"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": "@dev Remove employee if there are no owed funds and employee's end date has been reached\n@param _employeeId Employee's identifier",
            "id": 1544,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "_removeEmployeeIfTerminatedAndPaidOut",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1501,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1500,
                  "name": "_employeeId",
                  "nodeType": "VariableDeclaration",
                  "scope": 1544,
                  "src": "30488:19:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1499,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "30488:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "30487:21:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 1502,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "30518:0:0"
            },
            "scope": 1984,
            "src": "30441:433:0",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1657,
              "nodeType": "Block",
              "src": "31288:2173:0",
              "statements": [
                {
                  "assignments": [
                    1552
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1552,
                      "name": "accruedSalary",
                      "nodeType": "VariableDeclaration",
                      "scope": 1658,
                      "src": "31298:21:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1551,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "31298:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1555,
                  "initialValue": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 1553,
                      "name": "_employee",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1546,
                      "src": "31322:9:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                        "typeString": "struct Payroll.Employee storage pointer"
                      }
                    },
                    "id": 1554,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "accruedSalary",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 140,
                    "src": "31322:23:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "31298:47:0"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1558,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 1556,
                      "name": "_paymentAmount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1548,
                      "src": "31360:14:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 1557,
                      "name": "accruedSalary",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1552,
                      "src": "31378:13:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "31360:31:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1569,
                  "nodeType": "IfStatement",
                  "src": "31356:366:0",
                  "trueBody": {
                    "id": 1568,
                    "nodeType": "Block",
                    "src": "31393:329:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1565,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 1559,
                              "name": "_employee",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1546,
                              "src": "31635:9:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                                "typeString": "struct Payroll.Employee storage pointer"
                              }
                            },
                            "id": 1561,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "accruedSalary",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 140,
                            "src": "31635:23:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 1564,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "id": 1562,
                              "name": "accruedSalary",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1552,
                              "src": "31661:13:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "-",
                            "rightExpression": {
                              "argumentTypes": null,
                              "id": 1563,
                              "name": "_paymentAmount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1548,
                              "src": "31677:14:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "31661:30:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "31635:56:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1566,
                        "nodeType": "ExpressionStatement",
                        "src": "31635:56:0"
                      },
                      {
                        "expression": null,
                        "functionReturnParameters": 1550,
                        "id": 1567,
                        "nodeType": "Return",
                        "src": "31705:7:0"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    1571
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1571,
                      "name": "currentSalaryPaid",
                      "nodeType": "VariableDeclaration",
                      "scope": 1658,
                      "src": "31897:25:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1570,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "31897:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1573,
                  "initialValue": {
                    "argumentTypes": null,
                    "id": 1572,
                    "name": "_paymentAmount",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1548,
                    "src": "31925:14:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "31897:42:0"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1576,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 1574,
                      "name": "accruedSalary",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1552,
                      "src": "31953:13:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 1575,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "31969:1:0",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "31953:17:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1590,
                  "nodeType": "IfStatement",
                  "src": "31949:441:0",
                  "trueBody": {
                    "id": 1589,
                    "nodeType": "Block",
                    "src": "31972:418:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1581,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 1577,
                            "name": "currentSalaryPaid",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1571,
                            "src": "32227:17:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 1580,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "id": 1578,
                              "name": "_paymentAmount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1548,
                              "src": "32247:14:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "-",
                            "rightExpression": {
                              "argumentTypes": null,
                              "id": 1579,
                              "name": "accruedSalary",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1552,
                              "src": "32264:13:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "32247:30:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "32227:50:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1582,
                        "nodeType": "ExpressionStatement",
                        "src": "32227:50:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1587,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 1583,
                              "name": "_employee",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1546,
                              "src": "32352:9:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                                "typeString": "struct Payroll.Employee storage pointer"
                              }
                            },
                            "id": 1585,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "accruedSalary",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 140,
                            "src": "32352:23:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 1586,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "32378:1:0",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "32352:27:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1588,
                        "nodeType": "ExpressionStatement",
                        "src": "32352:27:0"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    1592
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1592,
                      "name": "salary",
                      "nodeType": "VariableDeclaration",
                      "scope": 1658,
                      "src": "32400:14:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1591,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "32400:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1595,
                  "initialValue": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 1593,
                      "name": "_employee",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1546,
                      "src": "32417:9:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                        "typeString": "struct Payroll.Employee storage pointer"
                      }
                    },
                    "id": 1594,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "denominationTokenSalary",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 138,
                    "src": "32417:33:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "32400:50:0"
                },
                {
                  "assignments": [
                    1597
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1597,
                      "name": "timeDiff",
                      "nodeType": "VariableDeclaration",
                      "scope": 1658,
                      "src": "32460:16:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1596,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "32460:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1602,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1600,
                        "name": "salary",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1592,
                        "src": "32501:6:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 1598,
                        "name": "currentSalaryPaid",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1571,
                        "src": "32479:17:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 1599,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "div",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 13992,
                      "src": "32479:21:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 1601,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "32479:29:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "32460:48:0"
                },
                {
                  "assignments": [
                    1604
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1604,
                      "name": "extraSalary",
                      "nodeType": "VariableDeclaration",
                      "scope": 1658,
                      "src": "32748:19:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1603,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "32748:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1608,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1607,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 1605,
                      "name": "currentSalaryPaid",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1571,
                      "src": "32770:17:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "%",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 1606,
                      "name": "salary",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1592,
                      "src": "32790:6:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "32770:26:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "32748:48:0"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1611,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 1609,
                      "name": "extraSalary",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1604,
                      "src": "32810:11:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 1610,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "32824:1:0",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "32810:15:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1628,
                  "nodeType": "IfStatement",
                  "src": "32806:132:0",
                  "trueBody": {
                    "id": 1627,
                    "nodeType": "Block",
                    "src": "32827:111:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1617,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 1612,
                            "name": "timeDiff",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1597,
                            "src": "32841:8:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "31",
                                "id": 1615,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "32865:1:0",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_1_by_1",
                                  "typeString": "int_const 1"
                                },
                                "value": "1"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_1_by_1",
                                  "typeString": "int_const 1"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 1613,
                                "name": "timeDiff",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1597,
                                "src": "32852:8:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 1614,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "add",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 14042,
                              "src": "32852:12:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 1616,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "32852:15:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "32841:26:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1618,
                        "nodeType": "ExpressionStatement",
                        "src": "32841:26:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1625,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 1619,
                              "name": "_employee",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1546,
                              "src": "32881:9:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                                "typeString": "struct Payroll.Employee storage pointer"
                              }
                            },
                            "id": 1621,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "accruedSalary",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 140,
                            "src": "32881:23:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 1624,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "id": 1622,
                              "name": "salary",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1592,
                              "src": "32907:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "-",
                            "rightExpression": {
                              "argumentTypes": null,
                              "id": 1623,
                              "name": "extraSalary",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1604,
                              "src": "32916:11:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "32907:20:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "32881:46:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1626,
                        "nodeType": "ExpressionStatement",
                        "src": "32881:46:0"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    1630
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1630,
                      "name": "lastPayrollDate",
                      "nodeType": "VariableDeclaration",
                      "scope": 1658,
                      "src": "32948:23:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1629,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "32948:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1638,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1636,
                        "name": "timeDiff",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1597,
                        "src": "33009:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 1632,
                              "name": "_employee",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1546,
                              "src": "32982:9:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                                "typeString": "struct Payroll.Employee storage pointer"
                              }
                            },
                            "id": 1633,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "lastPayroll",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 146,
                            "src": "32982:21:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          ],
                          "id": 1631,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "32974:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          },
                          "typeName": "uint256"
                        },
                        "id": 1634,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "32974:30:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 1635,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "add",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 14042,
                      "src": "32974:34:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 1637,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "32974:44:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "32948:70:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 1645,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 1640,
                          "name": "lastPayrollDate",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1630,
                          "src": "33249:15:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "id": 1642,
                                "name": "getTimestamp64",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 11199,
                                "src": "33276:14:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$__$returns$_t_uint64_$",
                                  "typeString": "function () view returns (uint64)"
                                }
                              },
                              "id": 1643,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "33276:16:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint64",
                                "typeString": "uint64"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint64",
                                "typeString": "uint64"
                              }
                            ],
                            "id": 1641,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "33268:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint256_$",
                              "typeString": "type(uint256)"
                            },
                            "typeName": "uint256"
                          },
                          "id": 1644,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "33268:25:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "33249:44:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1646,
                        "name": "ERROR_LAST_PAYROLL_DATE_TOO_BIG",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 127,
                        "src": "33295:31:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 1639,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        15156,
                        15157
                      ],
                      "referencedDeclaration": 15157,
                      "src": "33241:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1647,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "33241:86:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1648,
                  "nodeType": "ExpressionStatement",
                  "src": "33241:86:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1655,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1649,
                        "name": "_employee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1546,
                        "src": "33407:9:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                          "typeString": "struct Payroll.Employee storage pointer"
                        }
                      },
                      "id": 1651,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "lastPayroll",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 146,
                      "src": "33407:21:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 1653,
                          "name": "lastPayrollDate",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1630,
                          "src": "33438:15:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 1652,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "33431:6:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_uint64_$",
                          "typeString": "type(uint64)"
                        },
                        "typeName": "uint64"
                      },
                      "id": 1654,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "33431:23:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "33407:47:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 1656,
                  "nodeType": "ExpressionStatement",
                  "src": "33407:47:0"
                }
              ]
            },
            "documentation": "@dev Updates the accrued salary and payroll date of an employee based on a payment amount and\n     their currently owed salary since last payroll date\n@param _employee Employee struct in storage\n@param _paymentAmount Amount being paid to the employee",
            "id": 1658,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "_updateEmployeeAccountingBasedOnPaidSalary",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1549,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1546,
                  "name": "_employee",
                  "nodeType": "VariableDeclaration",
                  "scope": 1658,
                  "src": "31227:26:0",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                    "typeString": "struct Payroll.Employee"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1545,
                    "name": "Employee",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 156,
                    "src": "31227:8:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                      "typeString": "struct Payroll.Employee"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1548,
                  "name": "_paymentAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 1658,
                  "src": "31255:22:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1547,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "31255:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "31226:52:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 1550,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "31288:0:0"
            },
            "scope": 1984,
            "src": "31175:2286:0",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1674,
              "nodeType": "Block",
              "src": "33776:75:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 1672,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 1665,
                          "name": "employees",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 170,
                          "src": "33793:9:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Employee_$156_storage_$",
                            "typeString": "mapping(uint256 => struct Payroll.Employee storage ref)"
                          }
                        },
                        "id": 1667,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 1666,
                          "name": "_employeeId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1660,
                          "src": "33803:11:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "33793:22:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Employee_$156_storage",
                          "typeString": "struct Payroll.Employee storage ref"
                        }
                      },
                      "id": 1668,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "accountAddress",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 136,
                      "src": "33793:37:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 1670,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "33842:1:0",
                          "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": 1669,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "33834:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 1671,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "33834:10:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "33793:51:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 1664,
                  "id": 1673,
                  "nodeType": "Return",
                  "src": "33786:58:0"
                }
              ]
            },
            "documentation": "@dev Tell whether an employee is registered in this Payroll or not\n@param _employeeId Employee's identifier\n@return True if the given employee ID belongs to an registered employee, false otherwise",
            "id": 1675,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "_employeeExists",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1661,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1660,
                  "name": "_employeeId",
                  "nodeType": "VariableDeclaration",
                  "scope": 1675,
                  "src": "33726:19:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1659,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "33726:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "33725:21:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 1664,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1663,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1675,
                  "src": "33770:4:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 1662,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "33770:4:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "33769:6:0"
            },
            "scope": 1984,
            "src": "33701:150:0",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1734,
              "nodeType": "Block",
              "src": "34236:447:0",
              "statements": [
                {
                  "assignments": [
                    1681
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1681,
                      "name": "sum",
                      "nodeType": "VariableDeclaration",
                      "scope": 1735,
                      "src": "34246:11:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1680,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "34246:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1683,
                  "initialValue": {
                    "argumentTypes": null,
                    "hexValue": "30",
                    "id": 1682,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "34260:1:0",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_0_by_1",
                      "typeString": "int_const 0"
                    },
                    "value": "0"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "34246:15:0"
                },
                {
                  "assignments": [
                    1687
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1687,
                      "name": "allocationTokenAddresses",
                      "nodeType": "VariableDeclaration",
                      "scope": 1735,
                      "src": "34271:41:0",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                        "typeString": "address[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 1685,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "34271:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 1686,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "34271:9:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                          "typeString": "address[]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1690,
                  "initialValue": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 1688,
                      "name": "_employee",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1677,
                      "src": "34315:9:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                        "typeString": "struct Payroll.Employee storage pointer"
                      }
                    },
                    "id": 1689,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "allocationTokenAddresses",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 151,
                    "src": "34315:34:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage",
                      "typeString": "address[] storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "34271:78:0"
                },
                {
                  "body": {
                    "id": 1725,
                    "nodeType": "Block",
                    "src": "34421:198:0",
                    "statements": [
                      {
                        "assignments": [
                          1703
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1703,
                            "name": "token",
                            "nodeType": "VariableDeclaration",
                            "scope": 1735,
                            "src": "34435:13:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "typeName": {
                              "id": 1702,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "34435:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 1707,
                        "initialValue": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 1704,
                            "name": "allocationTokenAddresses",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1687,
                            "src": "34451:24:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                              "typeString": "address[] memory"
                            }
                          },
                          "id": 1706,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 1705,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1692,
                            "src": "34476:1:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "34451:27:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "34435:43:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 1709,
                                "name": "allowedTokens",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 178,
                                "src": "34500:13:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                                  "typeString": "mapping(address => bool)"
                                }
                              },
                              "id": 1711,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 1710,
                                "name": "token",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1703,
                                "src": "34514:5:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "34500:20:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 1712,
                              "name": "ERROR_NOT_ALLOWED_TOKEN",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 94,
                              "src": "34522:23:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory",
                                "typeString": "string memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_string_memory",
                                "typeString": "string memory"
                              }
                            ],
                            "id": 1708,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              15156,
                              15157
                            ],
                            "referencedDeclaration": 15157,
                            "src": "34492:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 1713,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "34492:54:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1714,
                        "nodeType": "ExpressionStatement",
                        "src": "34492:54:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1723,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 1715,
                            "name": "sum",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1681,
                            "src": "34560:3:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 1718,
                                    "name": "_employee",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1677,
                                    "src": "34574:9:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                                      "typeString": "struct Payroll.Employee storage pointer"
                                    }
                                  },
                                  "id": 1719,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "allocationTokens",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 155,
                                  "src": "34574:26:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                    "typeString": "mapping(address => uint256)"
                                  }
                                },
                                "id": 1721,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "id": 1720,
                                  "name": "token",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1703,
                                  "src": "34601:5:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "34574:33:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 1716,
                                "name": "sum",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1681,
                                "src": "34566:3:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 1717,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "add",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 14042,
                              "src": "34566:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 1722,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "34566:42:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "34560:48:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1724,
                        "nodeType": "ExpressionStatement",
                        "src": "34560:48:0"
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1698,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 1695,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1692,
                      "src": "34379:1:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1696,
                        "name": "allocationTokenAddresses",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1687,
                        "src": "34383:24:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        }
                      },
                      "id": 1697,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "34383:31:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "34379:35:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 1726,
                  "initializationExpression": {
                    "assignments": [
                      1692
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 1692,
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "scope": 1735,
                        "src": "34364:9:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1691,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "34364:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 1694,
                    "initialValue": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 1693,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "34376:1:0",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "34364:13:0"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 1700,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "34416:3:0",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 1699,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1692,
                        "src": "34416:1:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 1701,
                    "nodeType": "ExpressionStatement",
                    "src": "34416:3:0"
                  },
                  "nodeType": "ForStatement",
                  "src": "34359:260:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 1730,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 1728,
                          "name": "sum",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1681,
                          "src": "34636:3:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "313030",
                          "id": 1729,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "34643:3:0",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_100_by_1",
                            "typeString": "int_const 100"
                          },
                          "value": "100"
                        },
                        "src": "34636:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1731,
                        "name": "ERROR_DISTRIBUTION_NOT_FULL",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 97,
                        "src": "34648:27:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 1727,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        15156,
                        15157
                      ],
                      "referencedDeclaration": 15157,
                      "src": "34628:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1732,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "34628:48:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1733,
                  "nodeType": "ExpressionStatement",
                  "src": "34628:48:0"
                }
              ]
            },
            "documentation": "@dev Tell whether an employee has a valid token allocation or not.\n     A valid allocation is one that sums to 100 and only includes allowed tokens.\n@param _employee Employee struct in storage\n@return Reverts if employee's allocation is invalid",
            "id": 1735,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "_ensureEmployeeTokenAllocationsIsValid",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1678,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1677,
                  "name": "_employee",
                  "nodeType": "VariableDeclaration",
                  "scope": 1735,
                  "src": "34194:26:0",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                    "typeString": "struct Payroll.Employee"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1676,
                    "name": "Employee",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 156,
                    "src": "34194:8:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                      "typeString": "struct Payroll.Employee"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "34193:28:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 1679,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "34236:0:0"
            },
            "scope": 1984,
            "src": "34146:537:0",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1748,
              "nodeType": "Block",
              "src": "35010:61:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    },
                    "id": 1746,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1742,
                        "name": "_employee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1737,
                        "src": "35027:9:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                          "typeString": "struct Payroll.Employee storage pointer"
                        }
                      },
                      "id": 1743,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "endDate",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 148,
                      "src": "35027:17:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 1744,
                        "name": "getTimestamp64",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11199,
                        "src": "35048:14:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$__$returns$_t_uint64_$",
                          "typeString": "function () view returns (uint64)"
                        }
                      },
                      "id": 1745,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "35048:16:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "35027:37:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 1741,
                  "id": 1747,
                  "nodeType": "Return",
                  "src": "35020:44:0"
                }
              ]
            },
            "documentation": "@dev Tell whether an employee is still active or not\n@param _employee Employee struct in storage\n@return True if the employee exists and has an end date that has not been reached yet, false otherwise",
            "id": 1749,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "_isEmployeeActive",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1738,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1737,
                  "name": "_employee",
                  "nodeType": "VariableDeclaration",
                  "scope": 1749,
                  "src": "34953:26:0",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                    "typeString": "struct Payroll.Employee"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1736,
                    "name": "Employee",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 156,
                    "src": "34953:8:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                      "typeString": "struct Payroll.Employee"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "34952:28:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 1741,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1740,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1749,
                  "src": "35004:4:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 1739,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "35004:4:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "35003:6:0"
            },
            "scope": 1984,
            "src": "34926:145:0",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1762,
              "nodeType": "Block",
              "src": "35393:65:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 1757,
                          "name": "employees",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 170,
                          "src": "35428:9:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Employee_$156_storage_$",
                            "typeString": "mapping(uint256 => struct Payroll.Employee storage ref)"
                          }
                        },
                        "id": 1759,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 1758,
                          "name": "_employeeId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1751,
                          "src": "35438:11:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "35428:22:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Employee_$156_storage",
                          "typeString": "struct Payroll.Employee storage ref"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_Employee_$156_storage",
                          "typeString": "struct Payroll.Employee storage ref"
                        }
                      ],
                      "id": 1756,
                      "name": "_isEmployeeActive",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1749,
                      "src": "35410:17:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_Employee_$156_storage_ptr_$returns$_t_bool_$",
                        "typeString": "function (struct Payroll.Employee storage pointer) view returns (bool)"
                      }
                    },
                    "id": 1760,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "35410:41:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 1755,
                  "id": 1761,
                  "nodeType": "Return",
                  "src": "35403:48:0"
                }
              ]
            },
            "documentation": "@dev Tell whether an employee id is still active or not\n@param _employeeId Employee's identifier\n@return True if the employee exists and has an end date that has not been reached yet, false otherwise",
            "id": 1763,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "_isEmployeeIdActive",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1752,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1751,
                  "name": "_employeeId",
                  "nodeType": "VariableDeclaration",
                  "scope": 1763,
                  "src": "35343:19:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1750,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "35343:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "35342:21:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 1755,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1754,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1763,
                  "src": "35387:4:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 1753,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "35387:4:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "35386:6:0"
            },
            "scope": 1984,
            "src": "35314:144:0",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1795,
              "nodeType": "Block",
              "src": "35932:431:0",
              "statements": [
                {
                  "assignments": [
                    1771,
                    1773
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1771,
                      "name": "xrt",
                      "nodeType": "VariableDeclaration",
                      "scope": 1796,
                      "src": "36034:11:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint128",
                        "typeString": "uint128"
                      },
                      "typeName": {
                        "id": 1770,
                        "name": "uint128",
                        "nodeType": "ElementaryTypeName",
                        "src": "36034:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 1773,
                      "name": "when",
                      "nodeType": "VariableDeclaration",
                      "scope": 1796,
                      "src": "36047:11:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      },
                      "typeName": {
                        "id": 1772,
                        "name": "uint64",
                        "nodeType": "ElementaryTypeName",
                        "src": "36047:6:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1779,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1776,
                        "name": "denominationToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 160,
                        "src": "36084:17:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1777,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1765,
                        "src": "36135:6:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 1774,
                        "name": "feed",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 162,
                        "src": "36062:4:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IFeed_$14313",
                          "typeString": "contract IFeed"
                        }
                      },
                      "id": 1775,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "get",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 14312,
                      "src": "36062:8:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$returns$_t_uint128_$_t_uint64_$",
                        "typeString": "function (address,address) view external returns (uint128,uint64)"
                      }
                    },
                    "id": 1778,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "36062:122:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint128_$_t_uint64_$",
                      "typeString": "tuple(uint128,uint64)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "36033:151:0"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    },
                    "id": 1786,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 1783,
                          "name": "when",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1773,
                          "src": "36269:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 1780,
                            "name": "getTimestamp64",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11199,
                            "src": "36248:14:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$_t_uint64_$",
                              "typeString": "function () view returns (uint64)"
                            }
                          },
                          "id": 1781,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "36248:16:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "id": 1782,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sub",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 14159,
                        "src": "36248:20:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint64_$_t_uint64_$returns$_t_uint64_$bound_to$_t_uint64_$",
                          "typeString": "function (uint64,uint64) pure returns (uint64)"
                        }
                      },
                      "id": 1784,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "36248:26:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 1785,
                      "name": "rateExpiryTime",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 164,
                      "src": "36278:14:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "36248:44:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1790,
                  "nodeType": "IfStatement",
                  "src": "36244:83:0",
                  "trueBody": {
                    "id": 1789,
                    "nodeType": "Block",
                    "src": "36294:33:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 1787,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "36315:1:0",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "functionReturnParameters": 1769,
                        "id": 1788,
                        "nodeType": "Return",
                        "src": "36308:8:0"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1792,
                        "name": "xrt",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1771,
                        "src": "36352:3:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      ],
                      "id": 1791,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "36344:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_uint256_$",
                        "typeString": "type(uint256)"
                      },
                      "typeName": "uint256"
                    },
                    "id": 1793,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "36344:12:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 1769,
                  "id": 1794,
                  "nodeType": "Return",
                  "src": "36337:19:0"
                }
              ]
            },
            "documentation": "@dev Get exchange rate for a token based on the denomination token.\n     As an example, if the denomination token was USD and ETH's price was 100USD,\n     this would return 0.01 * precision rate for ETH.\n@param _token Token to get price of in denomination tokens\n@return Exchange rate (multiplied by the PPF rate precision)",
            "id": 1796,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "_getExchangeRateInDenominationToken",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1766,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1765,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 1796,
                  "src": "35884:14:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1764,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "35884:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "35883:16:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 1769,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1768,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1796,
                  "src": "35923:7:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1767,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "35923:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "35922:9:0"
            },
            "scope": 1984,
            "src": "35839:524:0",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1848,
              "nodeType": "Block",
              "src": "36832:457:0",
              "statements": [
                {
                  "assignments": [
                    1806
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1806,
                      "name": "timeDiff",
                      "nodeType": "VariableDeclaration",
                      "scope": 1849,
                      "src": "36842:16:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1805,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "36842:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1810,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1808,
                        "name": "_employee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1798,
                        "src": "36883:9:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                          "typeString": "struct Payroll.Employee storage pointer"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                          "typeString": "struct Payroll.Employee storage pointer"
                        }
                      ],
                      "id": 1807,
                      "name": "_getOwedPayrollPeriod",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1883,
                      "src": "36861:21:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_Employee_$156_storage_ptr_$returns$_t_uint256_$",
                        "typeString": "function (struct Payroll.Employee storage pointer) view returns (uint256)"
                      }
                    },
                    "id": 1809,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "36861:32:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "36842:51:0"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1813,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 1811,
                      "name": "timeDiff",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1806,
                      "src": "36907:8:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 1812,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "36919:1:0",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "36907:13:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1817,
                  "nodeType": "IfStatement",
                  "src": "36903:52:0",
                  "trueBody": {
                    "id": 1816,
                    "nodeType": "Block",
                    "src": "36922:33:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 1814,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "36943:1:0",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "functionReturnParameters": 1804,
                        "id": 1815,
                        "nodeType": "Return",
                        "src": "36936:8:0"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    1819
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1819,
                      "name": "salary",
                      "nodeType": "VariableDeclaration",
                      "scope": 1849,
                      "src": "36964:14:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1818,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "36964:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1822,
                  "initialValue": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 1820,
                      "name": "_employee",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1798,
                      "src": "36981:9:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                        "typeString": "struct Payroll.Employee storage pointer"
                      }
                    },
                    "id": 1821,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "denominationTokenSalary",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 138,
                    "src": "36981:33:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "36964:50:0"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "id": 1823,
                    "name": "_capped",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1800,
                    "src": "37029:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 1846,
                    "nodeType": "Block",
                    "src": "37231:52:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 1843,
                              "name": "timeDiff",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1806,
                              "src": "37263:8:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 1841,
                              "name": "salary",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1819,
                              "src": "37252:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 1842,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "mul",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 13967,
                            "src": "37252:10:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                              "typeString": "function (uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 1844,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "37252:20:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 1804,
                        "id": 1845,
                        "nodeType": "Return",
                        "src": "37245:27:0"
                      }
                    ]
                  },
                  "id": 1847,
                  "nodeType": "IfStatement",
                  "src": "37025:258:0",
                  "trueBody": {
                    "id": 1840,
                    "nodeType": "Block",
                    "src": "37038:187:0",
                    "statements": [
                      {
                        "assignments": [
                          1825
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1825,
                            "name": "result",
                            "nodeType": "VariableDeclaration",
                            "scope": 1849,
                            "src": "37107:14:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 1824,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "37107:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 1829,
                        "initialValue": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1828,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 1826,
                            "name": "salary",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1819,
                            "src": "37124:6:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "*",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 1827,
                            "name": "timeDiff",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1806,
                            "src": "37133:8:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "37124:17:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "37107:34:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "condition": {
                            "argumentTypes": null,
                            "components": [
                              {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 1834,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 1832,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "id": 1830,
                                    "name": "result",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1825,
                                    "src": "37163:6:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "/",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "id": 1831,
                                    "name": "timeDiff",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1806,
                                    "src": "37172:8:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "37163:17:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "!=",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "id": 1833,
                                  "name": "salary",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1819,
                                  "src": "37184:6:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "37163:27:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              }
                            ],
                            "id": 1835,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "37162:29:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "falseExpression": {
                            "argumentTypes": null,
                            "id": 1837,
                            "name": "result",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1825,
                            "src": "37208:6:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 1838,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "Conditional",
                          "src": "37162:52:0",
                          "trueExpression": {
                            "argumentTypes": null,
                            "id": 1836,
                            "name": "MAX_UINT256",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 61,
                            "src": "37194:11:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 1804,
                        "id": 1839,
                        "nodeType": "Return",
                        "src": "37155:59:0"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": "@dev Get owed salary since last payroll for an employee\n@param _employee Employee struct in storage\n@param _capped Safely cap the owed salary at max uint\n@return Owed salary in denomination tokens since last payroll for the employee.\n        If _capped is false, it reverts in case of an overflow.",
            "id": 1849,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "_getOwedSalarySinceLastPayroll",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1801,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1798,
                  "name": "_employee",
                  "nodeType": "VariableDeclaration",
                  "scope": 1849,
                  "src": "36758:26:0",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                    "typeString": "struct Payroll.Employee"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1797,
                    "name": "Employee",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 156,
                    "src": "36758:8:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                      "typeString": "struct Payroll.Employee"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1800,
                  "name": "_capped",
                  "nodeType": "VariableDeclaration",
                  "scope": 1849,
                  "src": "36786:12:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 1799,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "36786:4:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "36757:42:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 1804,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1803,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1849,
                  "src": "36823:7:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1802,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "36823:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "36822:9:0"
            },
            "scope": 1984,
            "src": "36718:571:0",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1882,
              "nodeType": "Block",
              "src": "37580:791:0",
              "statements": [
                {
                  "assignments": [
                    1857
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1857,
                      "name": "date",
                      "nodeType": "VariableDeclaration",
                      "scope": 1883,
                      "src": "37650:11:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      },
                      "typeName": {
                        "id": 1856,
                        "name": "uint64",
                        "nodeType": "ElementaryTypeName",
                        "src": "37650:6:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1866,
                  "initialValue": {
                    "argumentTypes": null,
                    "condition": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 1859,
                          "name": "_employee",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1851,
                          "src": "37682:9:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                            "typeString": "struct Payroll.Employee storage pointer"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                            "typeString": "struct Payroll.Employee storage pointer"
                          }
                        ],
                        "id": 1858,
                        "name": "_isEmployeeActive",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1749,
                        "src": "37664:17:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_struct$_Employee_$156_storage_ptr_$returns$_t_bool_$",
                          "typeString": "function (struct Payroll.Employee storage pointer) view returns (bool)"
                        }
                      },
                      "id": 1860,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "37664:28:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1863,
                        "name": "_employee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1851,
                        "src": "37714:9:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                          "typeString": "struct Payroll.Employee storage pointer"
                        }
                      },
                      "id": 1864,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "endDate",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 148,
                      "src": "37714:17:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "id": 1865,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "Conditional",
                    "src": "37664:67:0",
                    "trueExpression": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 1861,
                        "name": "getTimestamp64",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11199,
                        "src": "37695:14:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$__$returns$_t_uint64_$",
                          "typeString": "function () view returns (uint64)"
                        }
                      },
                      "id": 1862,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "37695:16:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "37650:81:0"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    },
                    "id": 1870,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 1867,
                      "name": "date",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1857,
                      "src": "38131:4:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1868,
                        "name": "_employee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1851,
                        "src": "38139:9:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                          "typeString": "struct Payroll.Employee storage pointer"
                        }
                      },
                      "id": 1869,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "lastPayroll",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 146,
                      "src": "38139:21:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "38131:29:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1874,
                  "nodeType": "IfStatement",
                  "src": "38127:68:0",
                  "trueBody": {
                    "id": 1873,
                    "nodeType": "Block",
                    "src": "38162:33:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 1871,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "38183:1:0",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "functionReturnParameters": 1855,
                        "id": 1872,
                        "nodeType": "Return",
                        "src": "38176:8:0"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        },
                        "id": 1879,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 1876,
                          "name": "date",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1857,
                          "src": "38335:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "-",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 1877,
                            "name": "_employee",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1851,
                            "src": "38342:9:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                              "typeString": "struct Payroll.Employee storage pointer"
                            }
                          },
                          "id": 1878,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "lastPayroll",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 146,
                          "src": "38342:21:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "src": "38335:28:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      ],
                      "id": 1875,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "38327:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_uint256_$",
                        "typeString": "type(uint256)"
                      },
                      "typeName": "uint256"
                    },
                    "id": 1880,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "38327:37:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 1855,
                  "id": 1881,
                  "nodeType": "Return",
                  "src": "38320:44:0"
                }
              ]
            },
            "documentation": "@dev Get owed payroll period for an employee\n@param _employee Employee struct in storage\n@return Owed time in seconds since the employee's last payroll date",
            "id": 1883,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "_getOwedPayrollPeriod",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1852,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1851,
                  "name": "_employee",
                  "nodeType": "VariableDeclaration",
                  "scope": 1883,
                  "src": "37520:26:0",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                    "typeString": "struct Payroll.Employee"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1850,
                    "name": "Employee",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 156,
                    "src": "37520:8:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                      "typeString": "struct Payroll.Employee"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "37519:28:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 1855,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1854,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1883,
                  "src": "37571:7:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1853,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "37571:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "37570:9:0"
            },
            "scope": 1984,
            "src": "37489:882:0",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1915,
              "nodeType": "Block",
              "src": "38859:321:0",
              "statements": [
                {
                  "assignments": [
                    1891
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1891,
                      "name": "currentOwedSalary",
                      "nodeType": "VariableDeclaration",
                      "scope": 1916,
                      "src": "38869:25:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1890,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "38869:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1896,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1893,
                        "name": "_employee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1885,
                        "src": "38928:9:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                          "typeString": "struct Payroll.Employee storage pointer"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "74727565",
                        "id": 1894,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "bool",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "38939:4:0",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "value": "true"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                          "typeString": "struct Payroll.Employee storage pointer"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 1892,
                      "name": "_getOwedSalarySinceLastPayroll",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1849,
                      "src": "38897:30:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_Employee_$156_storage_ptr_$_t_bool_$returns$_t_uint256_$",
                        "typeString": "function (struct Payroll.Employee storage pointer,bool) view returns (uint256)"
                      }
                    },
                    "id": 1895,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "38897:47:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "38869:75:0"
                },
                {
                  "assignments": [
                    1898
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1898,
                      "name": "totalOwedSalary",
                      "nodeType": "VariableDeclaration",
                      "scope": 1916,
                      "src": "38968:23:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1897,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "38968:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1903,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1902,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 1899,
                      "name": "currentOwedSalary",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1891,
                      "src": "38994:17:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "+",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1900,
                        "name": "_employee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1885,
                        "src": "39014:9:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                          "typeString": "struct Payroll.Employee storage pointer"
                        }
                      },
                      "id": 1901,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "accruedSalary",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 140,
                      "src": "39014:23:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "38994:43:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "38968:69:0"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1906,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 1904,
                      "name": "totalOwedSalary",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1898,
                      "src": "39051:15:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 1905,
                      "name": "currentOwedSalary",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1891,
                      "src": "39069:17:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "39051:35:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1912,
                  "nodeType": "IfStatement",
                  "src": "39047:95:0",
                  "trueBody": {
                    "id": 1911,
                    "nodeType": "Block",
                    "src": "39088:54:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1909,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 1907,
                            "name": "totalOwedSalary",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1898,
                            "src": "39102:15:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 1908,
                            "name": "MAX_UINT256",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 61,
                            "src": "39120:11:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "39102:29:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1910,
                        "nodeType": "ExpressionStatement",
                        "src": "39102:29:0"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1913,
                    "name": "totalOwedSalary",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1898,
                    "src": "39158:15:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 1889,
                  "id": 1914,
                  "nodeType": "Return",
                  "src": "39151:22:0"
                }
              ]
            },
            "documentation": "@dev Get owed salary since last payroll for an employee. It will take into account the accrued salary as well.\n     The result will be capped to max uint256 to avoid having an overflow.\n@param _employee Employee struct in storage\n@return Employee's total owed salary: current owed payroll since the last payroll date, plus the accrued salary.",
            "id": 1916,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "_getTotalOwedCappedSalary",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1886,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1885,
                  "name": "_employee",
                  "nodeType": "VariableDeclaration",
                  "scope": 1916,
                  "src": "38799:26:0",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                    "typeString": "struct Payroll.Employee"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1884,
                    "name": "Employee",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 156,
                    "src": "38799:8:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Employee_$156_storage_ptr",
                      "typeString": "struct Payroll.Employee"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "38798:28:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 1889,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1888,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1916,
                  "src": "38850:7:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1887,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "38850:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "38849:9:0"
            },
            "scope": 1984,
            "src": "38764:416:0",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1951,
              "nodeType": "Block",
              "src": "39467:326:0",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_PaymentType_$134",
                      "typeString": "enum Payroll.PaymentType"
                    },
                    "id": 1926,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 1923,
                      "name": "_type",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1918,
                      "src": "39481:5:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_PaymentType_$134",
                        "typeString": "enum Payroll.PaymentType"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1924,
                        "name": "PaymentType",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 134,
                        "src": "39490:11:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_PaymentType_$134_$",
                          "typeString": "type(enum Payroll.PaymentType)"
                        }
                      },
                      "id": 1925,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "Payroll",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "39490:19:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_PaymentType_$134",
                        "typeString": "enum Payroll.PaymentType"
                      }
                    },
                    "src": "39481:28:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "condition": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_enum$_PaymentType_$134",
                        "typeString": "enum Payroll.PaymentType"
                      },
                      "id": 1933,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 1930,
                        "name": "_type",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1918,
                        "src": "39570:5:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_PaymentType_$134",
                          "typeString": "enum Payroll.PaymentType"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 1931,
                          "name": "PaymentType",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 134,
                          "src": "39579:11:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_enum$_PaymentType_$134_$",
                            "typeString": "type(enum Payroll.PaymentType)"
                          }
                        },
                        "id": 1932,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberName": "Reimbursement",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "39579:25:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_PaymentType_$134",
                          "typeString": "enum Payroll.PaymentType"
                        }
                      },
                      "src": "39570:34:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseBody": null,
                    "id": 1937,
                    "nodeType": "IfStatement",
                    "src": "39566:96:0",
                    "trueBody": {
                      "id": 1936,
                      "nodeType": "Block",
                      "src": "39606:56:0",
                      "statements": [
                        {
                          "expression": {
                            "argumentTypes": null,
                            "hexValue": "456d706c6f796565207265696d62757273656d656e74",
                            "id": 1934,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "39627:24:0",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_bbb2ad9332292ede951972e02d091a13684c35a8d15242ca014d83fc24223c70",
                              "typeString": "literal_string \"Employee reimbursement\""
                            },
                            "value": "Employee reimbursement"
                          },
                          "functionReturnParameters": 1922,
                          "id": 1935,
                          "nodeType": "Return",
                          "src": "39620:31:0"
                        }
                      ]
                    }
                  },
                  "id": 1938,
                  "nodeType": "IfStatement",
                  "src": "39477:185:0",
                  "trueBody": {
                    "id": 1929,
                    "nodeType": "Block",
                    "src": "39511:49:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "456d706c6f7965652073616c617279",
                          "id": 1927,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "string",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "39532:17:0",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_stringliteral_9663ea10cc7328675b783385c4968d93ca8f6560fb62ecadc3bab8fb17894e44",
                            "typeString": "literal_string \"Employee salary\""
                          },
                          "value": "Employee salary"
                        },
                        "functionReturnParameters": 1922,
                        "id": 1928,
                        "nodeType": "Return",
                        "src": "39525:24:0"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_PaymentType_$134",
                      "typeString": "enum Payroll.PaymentType"
                    },
                    "id": 1942,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 1939,
                      "name": "_type",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1918,
                      "src": "39667:5:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_PaymentType_$134",
                        "typeString": "enum Payroll.PaymentType"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1940,
                        "name": "PaymentType",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 134,
                        "src": "39676:11:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_PaymentType_$134_$",
                          "typeString": "type(enum Payroll.PaymentType)"
                        }
                      },
                      "id": 1941,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "Bonus",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "39676:17:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_PaymentType_$134",
                        "typeString": "enum Payroll.PaymentType"
                      }
                    },
                    "src": "39667:26:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1946,
                  "nodeType": "IfStatement",
                  "src": "39663:80:0",
                  "trueBody": {
                    "id": 1945,
                    "nodeType": "Block",
                    "src": "39695:48:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "456d706c6f79656520626f6e7573",
                          "id": 1943,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "string",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "39716:16:0",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_stringliteral_2016c14dd8969cad91c4b8ce072ffc5ec4536027be9b0c8d966002f125494149",
                            "typeString": "literal_string \"Employee bonus\""
                          },
                          "value": "Employee bonus"
                        },
                        "functionReturnParameters": 1922,
                        "id": 1944,
                        "nodeType": "Return",
                        "src": "39709:23:0"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1948,
                        "name": "ERROR_INVALID_PAYMENT_TYPE",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 100,
                        "src": "39759:26:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 1947,
                      "name": "revert",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        15158,
                        15159
                      ],
                      "referencedDeclaration": 15159,
                      "src": "39752:6:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (string memory) pure"
                      }
                    },
                    "id": 1949,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "39752:34:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1950,
                  "nodeType": "ExpressionStatement",
                  "src": "39752:34:0"
                }
              ]
            },
            "documentation": "@dev Get payment reference for a given payment type\n@param _type Payment type to query the reference of\n@return Payment reference for the given payment type",
            "id": 1952,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "_paymentReferenceFor",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1919,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1918,
                  "name": "_type",
                  "nodeType": "VariableDeclaration",
                  "scope": 1952,
                  "src": "39410:17:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_PaymentType_$134",
                    "typeString": "enum Payroll.PaymentType"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1917,
                    "name": "PaymentType",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 134,
                    "src": "39410:11:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_PaymentType_$134",
                      "typeString": "enum Payroll.PaymentType"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "39409:19:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 1922,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1921,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1952,
                  "src": "39452:6:0",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 1920,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "39452:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "39451:15:0"
            },
            "scope": 1984,
            "src": "39380:413:0",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1982,
              "nodeType": "Block",
              "src": "39907:213:0",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 1964,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 1962,
                          "name": "_owedAmount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1954,
                          "src": "39925:11:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 1963,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "39939:1:0",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "39925:15:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1965,
                        "name": "ERROR_NOTHING_PAID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 103,
                        "src": "39942:18:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 1961,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        15156,
                        15157
                      ],
                      "referencedDeclaration": 15157,
                      "src": "39917:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1966,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "39917:44:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1967,
                  "nodeType": "ExpressionStatement",
                  "src": "39917:44:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 1971,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 1969,
                          "name": "_owedAmount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1954,
                          "src": "39979:11:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 1970,
                          "name": "_requestedAmount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1956,
                          "src": "39994:16:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "39979:31:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1972,
                        "name": "ERROR_INVALID_REQUESTED_AMOUNT",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 130,
                        "src": "40012:30:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 1968,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        15156,
                        15157
                      ],
                      "referencedDeclaration": 15157,
                      "src": "39971:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1973,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "39971:72:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1974,
                  "nodeType": "ExpressionStatement",
                  "src": "39971:72:0"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "condition": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 1977,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 1975,
                        "name": "_requestedAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1956,
                        "src": "40060:16:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": ">",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 1976,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "40079:1:0",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "40060:20:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseExpression": {
                      "argumentTypes": null,
                      "id": 1979,
                      "name": "_owedAmount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1954,
                      "src": "40102:11:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 1980,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "Conditional",
                    "src": "40060:53:0",
                    "trueExpression": {
                      "argumentTypes": null,
                      "id": 1978,
                      "name": "_requestedAmount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1956,
                      "src": "40083:16:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 1960,
                  "id": 1981,
                  "nodeType": "Return",
                  "src": "40053:60:0"
                }
              ]
            },
            "documentation": null,
            "id": 1983,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "_ensurePaymentAmount",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1957,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1954,
                  "name": "_owedAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 1983,
                  "src": "39829:19:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1953,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "39829:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1956,
                  "name": "_requestedAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 1983,
                  "src": "39850:24:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1955,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "39850:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "39828:47:0"
            },
            "payable": false,
            "returnParameters": {
              "id": 1960,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1959,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1983,
                  "src": "39898:7:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1958,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "39898:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "39897:9:0"
            },
            "scope": 1984,
            "src": "39799:321:0",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "private"
          }
        ],
        "scope": 1985,
        "src": "508:39614:0"
      }
    ],
    "src": "0:40123:0"
  },
  "compiler": {
    "name": "solc",
    "version": "0.4.24+commit.e67f0147.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "2.0.1",
  "updatedAt": "2019-09-04T11:02:55.586Z"
}