60806040526040518060400160405280601181526020017f44654669204f47204865646765686f6773000000000000000000000000000000815250600890816200004a919062000654565b503480156200005857600080fd5b506040518060400160405280601881526020017f68747470733a2f2f6170692e726576762e67672f6e66742f0000000000000000815250620000a0816200019860201b60201c565b50620000c1620000b5620001ad60201b60201c565b620001b560201b60201c565b6000600360146101000a81548160ff0219169083151502179055506000600167ffffffffffffffff811115620000fc57620000fb620003e5565b5b6040519080825280602002602001820160405280156200012b5781602001602082028036833780820191505090505b50905033816000815181106200014657620001456200073b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505062000191816200027b60201b60201c565b50620007ed565b8060029081620001a9919062000654565b5050565b600033905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6200028b6200031f60201b60201c565b60005b81518110156200031b57600160056000848481518110620002b457620002b36200073b565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806001019150506200028e565b5050565b6200032f620001ad60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000355620003b060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620003ae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003a590620007cb565b60405180910390fd5b565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200045c57607f821691505b60208210810362000472576200047162000414565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620004dc7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200049d565b620004e886836200049d565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620005356200052f620005298462000500565b6200050a565b62000500565b9050919050565b6000819050919050565b620005518362000514565b6200056962000560826200053c565b848454620004aa565b825550505050565b600090565b6200058062000571565b6200058d81848462000546565b505050565b5b81811015620005b557620005a960008262000576565b60018101905062000593565b5050565b601f8211156200060457620005ce8162000478565b620005d9846200048d565b81016020851015620005e9578190505b62000601620005f8856200048d565b83018262000592565b50505b505050565b600082821c905092915050565b6000620006296000198460080262000609565b1980831691505092915050565b600062000644838362000616565b9150826002028217905092915050565b6200065f82620003da565b67ffffffffffffffff8111156200067b576200067a620003e5565b5b62000687825462000443565b62000694828285620005b9565b600060209050601f831160018114620006cc5760008415620006b7578287015190505b620006c3858262000636565b86555062000733565b601f198416620006dc8662000478565b60005b828110156200070657848901518255600182019150602085019450602081019050620006df565b8683101562000726578489015162000722601f89168262000616565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000620007b36020836200076a565b9150620007c0826200077b565b602082019050919050565b60006020820190508181036000830152620007e681620007a4565b9050919050565b61527780620007fd6000396000f3fe608060405234801561001057600080fd5b50600436106101ef5760003560e01c806375ceb3411161010f578063b34951c2116100a2578063e985e9c511610071578063e985e9c514610562578063f242432a14610592578063f2fde38b146105ae578063f43956b5146105ca576101ef565b8063b34951c2146104c8578063bd85b039146104d2578063c1e0372814610502578063cc471bf814610532576101ef565b80639c54df64116100de5780639c54df64146104585780639dc29fac14610474578063a22cb46514610490578063b2dc5dc3146104ac576101ef565b806375ceb341146103f85780638456cb591461041457806384da92a71461041e5780638da5cb5b1461043a576101ef565b80633ca34072116101875780634f558e79116101565780634f558e79146103845780635c975abb146103b4578063715018a6146103d257806372b3b620146103dc576101ef565b80633ca34072146103125780633f4ba83a1461032e57806340c10f19146103385780634e1273f414610354576101ef565b80630e89341c116101c35780630e89341c1461028e5780631ba9b8eb146102be5780632eb2c2d6146102da578063377e11e0146102f6576101ef565b8062fdd58e146101f457806301ffc9a71461022457806302fe53051461025457806306fdde0314610270575b600080fd5b61020e600480360381019061020991906132d8565b6105d4565b60405161021b9190613327565b60405180910390f35b61023e6004803603810190610239919061339a565b61069c565b60405161024b91906133e2565b60405180910390f35b61026e60048036038101906102699190613543565b61077e565b005b6102786107d2565b604051610285919061360b565b60405180910390f35b6102a860048036038101906102a3919061362d565b610864565b6040516102b5919061360b565b60405180910390f35b6102d860048036038101906102d39190613722565b6108fa565b005b6102f460048036038101906102ef91906138e2565b610984565b005b610310600480360381019061030b91906139b1565b6109a0565b005b61032c600480360381019061032791906139fa565b610a2e565b005b610336610ac9565b005b610352600480360381019061034d91906132d8565b610adb565b005b61036e60048036038101906103699190613a69565b610b43565b60405161037b9190613b9f565b60405180910390f35b61039e6004803603810190610399919061362d565b610c5c565b6040516103ab91906133e2565b60405180910390f35b6103bc610c70565b6040516103c991906133e2565b60405180910390f35b6103da610c87565b005b6103f660048036038101906103f19190613bc1565b610c9b565b005b610412600480360381019061040d9190613c1d565b610d85565b005b61041c610e76565b005b61043860048036038101906104339190613543565b610e88565b005b610442610ee3565b60405161044f9190613c88565b60405180910390f35b610472600480360381019061046d91906139b1565b610f0d565b005b61048e600480360381019061048991906132d8565b610fa4565b005b6104aa60048036038101906104a59190613ccf565b611041565b005b6104c660048036038101906104c19190613c1d565b611057565b005b6104d061117d565b005b6104ec60048036038101906104e7919061362d565b6111e0565b6040516104f99190613327565b60405180910390f35b61051c6004803603810190610517919061362d565b6111fd565b6040516105299190613d96565b60405180910390f35b61054c600480360381019061054791906132d8565b611264565b60405161055991906133e2565b60405180910390f35b61057c60048036038101906105779190613db8565b611360565b60405161058991906133e2565b60405180910390f35b6105ac60048036038101906105a79190613df8565b6113f4565b005b6105c860048036038101906105c39190613e8f565b611410565b005b6105d2611493565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610644576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161063b90613f2e565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061076757507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806107775750610776826114ff565b5b9050919050565b61078733611569565b6107c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107bd90613f9a565b60405180910390fd5b6107cf816115bf565b50565b6060600880546107e190613fe9565b80601f016020809104026020016040519081016040528092919081815260200182805461080d90613fe9565b801561085a5780601f1061082f5761010080835404028352916020019161085a565b820191906000526020600020905b81548152906001019060200180831161083d57829003601f168201915b5050505050905090565b606061087060076115d2565b821061088d576040518060200160405280600081525090506108f5565b6000600660008481526020019081526020016000206040518060400160405290816000820154815260200160018201548152505090506108cc836115e0565b81600001516040516020016108e2929190614081565b6040516020818303038152906040529150505b919050565b61090333611569565b610942576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161093990613f9a565b60405180910390fd5b60005b825181101561097f57610972838281518110610964576109636140a9565b5b602002602001015183610adb565b8080600101915050610945565b505050565b61098c611674565b61099985858585856116f2565b5050505050565b6109a8611674565b60005b8151811015610a2a57600560008383815181106109cb576109ca6140a9565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff021916905580806001019150506109ab565b5050565b610a3733611569565b610a76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6d90613f9a565b60405180910390fd5b600082610a8290614115565b905060405180604001604052808281526020018381525060066000868152602001908152602001600020600082015181600001556020820151816001015590505050505050565b610ad1611674565b610ad9611793565b565b610ae433611569565b610b23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1a90613f9a565b60405180910390fd5b610b3f82826001604051806020016040528060008152506117f6565b5050565b60608151835114610b89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b80906141ee565b60405180910390fd5b6000835167ffffffffffffffff811115610ba657610ba5613418565b5b604051908082528060200260200182016040528015610bd45781602001602082028036833780820191505090505b50905060005b8451811015610c5157610c21858281518110610bf957610bf86140a9565b5b6020026020010151858381518110610c1457610c136140a9565b5b60200260200101516105d4565b828281518110610c3457610c336140a9565b5b60200260200101818152505080610c4a9061423d565b9050610bda565b508091505092915050565b600080610c68836111e0565b119050919050565b6000600360149054906101000a900460ff16905090565b610c8f611674565b610c9960006119a6565b565b610ca433611569565b610ce3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cda90613f9a565b60405180910390fd5b600082610cef90614115565b90506000610cfd60076115d2565b90506040518060400160405280838152602001848152506006600083815260200190815260200160002060008201518160000155602082015181600101559050507f77528eee73648b7cb45b94dd88b033673b03f308b65c832b2d9774695c04181e81604051610d6d9190613327565b60405180910390a1610d7f6007611a6c565b50505050565b610d8e33611569565b610dcd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc490613f9a565b60405180910390fd5b6000815167ffffffffffffffff811115610dea57610de9613418565b5b604051908082528060200260200182016040528015610e185781602001602082028036833780820191505090505b50905060005b8251811015610e55576001828281518110610e3c57610e3b6140a9565b5b6020026020010181815250508080600101915050610e1e565b50610e7183838360405180602001604052806000815250611a82565b505050565b610e7e611674565b610e86611cae565b565b610e9133611569565b610ed0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec790613f9a565b60405180910390fd5b8060089081610edf9190614424565b5050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610f15611674565b60005b8151811015610fa057600160056000848481518110610f3a57610f396140a9565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080600101915050610f18565b5050565b610fac611d11565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161480610ff25750610ff182610fec611d11565b611360565b5b611031576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102890614568565b60405180910390fd5b61103d82826001611d19565b5050565b61105361104c611d11565b8383611f5f565b5050565b61105f611d11565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614806110a557506110a48261109f611d11565b611360565b5b6110e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110db90614568565b60405180910390fd5b6000815167ffffffffffffffff81111561110157611100613418565b5b60405190808252806020026020018201604052801561112f5781602001602082028036833780820191505090505b50905060005b825181101561116c576001828281518110611153576111526140a9565b5b6020026020010181815250508080600101915050611135565b506111788383836120cb565b505050565b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff02191690556111de6111d7610ee3565b6000611041565b565b600060046000838152602001908152602001600020549050919050565b611205613216565b600060066000848152602001908152602001600020604051806040016040529081600082015481526020016001820154815250509050604051806040016040528061124f85610864565b81526020018260200151815250915050919050565b600061127060076115d2565b82106112b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a8906145d4565b60405180910390fd5b600660008381526020019081526020016000206001015442111561130a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130190614640565b60405180910390fd5b600061131684846105d4565b14611356576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134d906146ac565b60405180910390fd5b6001905092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6113fc611674565b6114098585858585612399565b5050505050565b611418611674565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611487576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147e9061473e565b60405180910390fd5b611490816119a6565b50565b6001600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506114fd6114f6610ee3565b6001611041565b565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b80600290816115ce9190614424565b5050565b600081600001549050919050565b6060600280546115ef90613fe9565b80601f016020809104026020016040519081016040528092919081815260200182805461161b90613fe9565b80156116685780601f1061163d57610100808354040283529160200191611668565b820191906000526020600020905b81548152906001019060200180831161164b57829003601f168201915b50505050509050919050565b61167c611d11565b73ffffffffffffffffffffffffffffffffffffffff1661169a610ee3565b73ffffffffffffffffffffffffffffffffffffffff16146116f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e7906147aa565b60405180910390fd5b565b6116fa611d11565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480611740575061173f8561173a611d11565b611360565b5b61177f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177690614568565b60405180910390fd5b61178c858585858561243a565b5050505050565b61179b61275b565b6000600360146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6117df611d11565b6040516117ec9190613c88565b60405180910390a1565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611865576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185c9061483c565b60405180910390fd5b600061186f611d11565b9050600061187c856127a4565b90506000611889856127a4565b905061189a8360008985858961281e565b8460008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546118f9919061485c565b925050819055508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628989604051611977929190614890565b60405180910390a461198e83600089858589612980565b61199d83600089898989612988565b50505050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6001816000016000828254019250508190555050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611af1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae89061483c565b60405180910390fd5b8151835114611b35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2c9061492b565b60405180910390fd5b6000611b3f611d11565b9050611b508160008787878761281e565b60005b8451811015611c0957838181518110611b6f57611b6e6140a9565b5b6020026020010151600080878481518110611b8d57611b8c6140a9565b5b6020026020010151815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611bef919061485c565b925050819055508080611c019061423d565b915050611b53565b508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611c8192919061494b565b60405180910390a4611c9881600087878787612980565b611ca781600087878787612b5f565b5050505050565b611cb6612d36565b6001600360146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611cfa611d11565b604051611d079190613c88565b60405180910390a1565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611d88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7f906149f4565b60405180910390fd5b6000611d92611d11565b90506000611d9f846127a4565b90506000611dac846127a4565b9050611dcc8387600085856040518060200160405280600081525061281e565b600080600087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905084811015611e63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5a90614a86565b60405180910390fd5b84810360008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628989604051611f30929190614890565b60405180910390a4611f5684886000868660405180602001604052806000815250612980565b50505050505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611fcd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc490614b18565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516120be91906133e2565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361213a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612131906149f4565b60405180910390fd5b805182511461217e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121759061492b565b60405180910390fd5b6000612188611d11565b90506121a88185600086866040518060200160405280600081525061281e565b60005b83518110156122f55760008482815181106121c9576121c86140a9565b5b6020026020010151905060008483815181106121e8576121e76140a9565b5b60200260200101519050600080600084815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612289576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228090614a86565b60405180910390fd5b81810360008085815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050505080806122ed9061423d565b9150506121ab565b50600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb868660405161236d92919061494b565b60405180910390a461239381856000868660405180602001604052806000815250612980565b50505050565b6123a1611d11565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806123e757506123e6856123e1611d11565b611360565b5b612426576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241d90614568565b60405180910390fd5b6124338585858585612d80565b5050505050565b815183511461247e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124759061492b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036124ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124e490614baa565b60405180910390fd5b60006124f7611d11565b905061250781878787878761281e565b60005b84518110156126b8576000858281518110612528576125276140a9565b5b602002602001015190506000858381518110612547576125466140a9565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156125e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125df90614c3c565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461269d919061485c565b92505081905550505050806126b19061423d565b905061250a565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161272f92919061494b565b60405180910390a4612745818787878787612980565b612753818787878787612b5f565b505050505050565b612763610c70565b6127a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161279990614ca8565b60405180910390fd5b565b60606000600167ffffffffffffffff8111156127c3576127c2613418565b5b6040519080825280602002602001820160405280156127f15781602001602082028036833780820191505090505b5090508281600081518110612809576128086140a9565b5b60200260200101818152505080915050919050565b612826612d36565b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141580156128905750600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b1561296a5761289e33611569565b6128dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128d490614d60565b60405180910390fd5b600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612969576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161296090614df2565b60405180910390fd5b5b61297886868686868661301b565b505050505050565b505050505050565b6129a78473ffffffffffffffffffffffffffffffffffffffff166131eb565b15612b57578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b81526004016129ed959493929190614e5c565b6020604051808303816000875af1925050508015612a2957506040513d601f19601f82011682018060405250810190612a269190614ecb565b60015b612ace57612a35614f05565b806308c379a003612a915750612a49614f27565b80612a545750612a93565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a88919061360b565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ac590615029565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612b55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b4c906150bb565b60405180910390fd5b505b505050505050565b612b7e8473ffffffffffffffffffffffffffffffffffffffff166131eb565b15612d2e578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401612bc49594939291906150db565b6020604051808303816000875af1925050508015612c0057506040513d601f19601f82011682018060405250810190612bfd9190614ecb565b60015b612ca557612c0c614f05565b806308c379a003612c685750612c20614f27565b80612c2b5750612c6a565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c5f919061360b565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c9c90615029565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612d2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d23906150bb565b60405180910390fd5b505b505050505050565b612d3e610c70565b15612d7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d759061518f565b60405180910390fd5b565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612def576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612de690614baa565b60405180910390fd5b6000612df9611d11565b90506000612e06856127a4565b90506000612e13856127a4565b9050612e2383898985858961281e565b600080600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905085811015612eba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eb190614c3c565b60405180910390fd5b85810360008089815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508560008089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612f6f919061485c565b925050819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a8a604051612fec929190614890565b60405180910390a4613002848a8a86868a612980565b613010848a8a8a8a8a612988565b505050505050505050565b61302986868686868661320e565b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16036130da5760005b83518110156130d85782818151811061307c5761307b6140a9565b5b60200260200101516004600086848151811061309b5761309a6140a9565b5b6020026020010151815260200190815260200160002060008282546130c0919061485c565b92505081905550806130d19061423d565b9050613060565b505b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036131e35760005b83518110156131e157600084828151811061312f5761312e6140a9565b5b60200260200101519050600084838151811061314e5761314d6140a9565b5b60200260200101519050600060046000848152602001908152602001600020549050818110156131b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131aa90615221565b60405180910390fd5b8181036004600085815260200190815260200160002081905550505050806131da9061423d565b9050613111565b505b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b505050505050565b604051806040016040528060608152602001600081525090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061326f82613244565b9050919050565b61327f81613264565b811461328a57600080fd5b50565b60008135905061329c81613276565b92915050565b6000819050919050565b6132b5816132a2565b81146132c057600080fd5b50565b6000813590506132d2816132ac565b92915050565b600080604083850312156132ef576132ee61323a565b5b60006132fd8582860161328d565b925050602061330e858286016132c3565b9150509250929050565b613321816132a2565b82525050565b600060208201905061333c6000830184613318565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61337781613342565b811461338257600080fd5b50565b6000813590506133948161336e565b92915050565b6000602082840312156133b0576133af61323a565b5b60006133be84828501613385565b91505092915050565b60008115159050919050565b6133dc816133c7565b82525050565b60006020820190506133f760008301846133d3565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61345082613407565b810181811067ffffffffffffffff8211171561346f5761346e613418565b5b80604052505050565b6000613482613230565b905061348e8282613447565b919050565b600067ffffffffffffffff8211156134ae576134ad613418565b5b6134b782613407565b9050602081019050919050565b82818337600083830152505050565b60006134e66134e184613493565b613478565b90508281526020810184848401111561350257613501613402565b5b61350d8482856134c4565b509392505050565b600082601f83011261352a576135296133fd565b5b813561353a8482602086016134d3565b91505092915050565b6000602082840312156135595761355861323a565b5b600082013567ffffffffffffffff8111156135775761357661323f565b5b61358384828501613515565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156135c65780820151818401526020810190506135ab565b60008484015250505050565b60006135dd8261358c565b6135e78185613597565b93506135f78185602086016135a8565b61360081613407565b840191505092915050565b6000602082019050818103600083015261362581846135d2565b905092915050565b6000602082840312156136435761364261323a565b5b6000613651848285016132c3565b91505092915050565b600067ffffffffffffffff82111561367557613674613418565b5b602082029050602081019050919050565b600080fd5b600061369e6136998461365a565b613478565b905080838252602082019050602084028301858111156136c1576136c0613686565b5b835b818110156136ea57806136d6888261328d565b8452602084019350506020810190506136c3565b5050509392505050565b600082601f830112613709576137086133fd565b5b813561371984826020860161368b565b91505092915050565b600080604083850312156137395761373861323a565b5b600083013567ffffffffffffffff8111156137575761375661323f565b5b613763858286016136f4565b9250506020613774858286016132c3565b9150509250929050565b600067ffffffffffffffff82111561379957613798613418565b5b602082029050602081019050919050565b60006137bd6137b88461377e565b613478565b905080838252602082019050602084028301858111156137e0576137df613686565b5b835b8181101561380957806137f588826132c3565b8452602084019350506020810190506137e2565b5050509392505050565b600082601f830112613828576138276133fd565b5b81356138388482602086016137aa565b91505092915050565b600067ffffffffffffffff82111561385c5761385b613418565b5b61386582613407565b9050602081019050919050565b600061388561388084613841565b613478565b9050828152602081018484840111156138a1576138a0613402565b5b6138ac8482856134c4565b509392505050565b600082601f8301126138c9576138c86133fd565b5b81356138d9848260208601613872565b91505092915050565b600080600080600060a086880312156138fe576138fd61323a565b5b600061390c8882890161328d565b955050602061391d8882890161328d565b945050604086013567ffffffffffffffff81111561393e5761393d61323f565b5b61394a88828901613813565b935050606086013567ffffffffffffffff81111561396b5761396a61323f565b5b61397788828901613813565b925050608086013567ffffffffffffffff8111156139985761399761323f565b5b6139a4888289016138b4565b9150509295509295909350565b6000602082840312156139c7576139c661323a565b5b600082013567ffffffffffffffff8111156139e5576139e461323f565b5b6139f1848285016136f4565b91505092915050565b600080600060608486031215613a1357613a1261323a565b5b6000613a21868287016132c3565b935050602084013567ffffffffffffffff811115613a4257613a4161323f565b5b613a4e86828701613515565b9250506040613a5f868287016132c3565b9150509250925092565b60008060408385031215613a8057613a7f61323a565b5b600083013567ffffffffffffffff811115613a9e57613a9d61323f565b5b613aaa858286016136f4565b925050602083013567ffffffffffffffff811115613acb57613aca61323f565b5b613ad785828601613813565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613b16816132a2565b82525050565b6000613b288383613b0d565b60208301905092915050565b6000602082019050919050565b6000613b4c82613ae1565b613b568185613aec565b9350613b6183613afd565b8060005b83811015613b92578151613b798882613b1c565b9750613b8483613b34565b925050600181019050613b65565b5085935050505092915050565b60006020820190508181036000830152613bb98184613b41565b905092915050565b60008060408385031215613bd857613bd761323a565b5b600083013567ffffffffffffffff811115613bf657613bf561323f565b5b613c0285828601613515565b9250506020613c13858286016132c3565b9150509250929050565b60008060408385031215613c3457613c3361323a565b5b6000613c428582860161328d565b925050602083013567ffffffffffffffff811115613c6357613c6261323f565b5b613c6f85828601613813565b9150509250929050565b613c8281613264565b82525050565b6000602082019050613c9d6000830184613c79565b92915050565b613cac816133c7565b8114613cb757600080fd5b50565b600081359050613cc981613ca3565b92915050565b60008060408385031215613ce657613ce561323a565b5b6000613cf48582860161328d565b9250506020613d0585828601613cba565b9150509250929050565b600082825260208201905092915050565b6000613d2b8261358c565b613d358185613d0f565b9350613d458185602086016135a8565b613d4e81613407565b840191505092915050565b60006040830160008301518482036000860152613d768282613d20565b9150506020830151613d8b6020860182613b0d565b508091505092915050565b60006020820190508181036000830152613db08184613d59565b905092915050565b60008060408385031215613dcf57613dce61323a565b5b6000613ddd8582860161328d565b9250506020613dee8582860161328d565b9150509250929050565b600080600080600060a08688031215613e1457613e1361323a565b5b6000613e228882890161328d565b9550506020613e338882890161328d565b9450506040613e44888289016132c3565b9350506060613e55888289016132c3565b925050608086013567ffffffffffffffff811115613e7657613e7561323f565b5b613e82888289016138b4565b9150509295509295909350565b600060208284031215613ea557613ea461323a565b5b6000613eb38482850161328d565b91505092915050565b7f455243313135353a2061646472657373207a65726f206973206e6f742061207660008201527f616c6964206f776e657200000000000000000000000000000000000000000000602082015250565b6000613f18602a83613597565b9150613f2382613ebc565b604082019050919050565b60006020820190508181036000830152613f4781613f0b565b9050919050565b7f556e617574686f72697a65640000000000000000000000000000000000000000600082015250565b6000613f84600c83613597565b9150613f8f82613f4e565b602082019050919050565b60006020820190508181036000830152613fb381613f77565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061400157607f821691505b60208210810361401457614013613fba565b5b50919050565b600081905092915050565b60006140308261358c565b61403a818561401a565b935061404a8185602086016135a8565b80840191505092915050565b6000819050919050565b6000819050919050565b61407b61407682614056565b614060565b82525050565b600061408d8285614025565b9150614099828461406a565b6020820191508190509392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b6000819050602082019050919050565b60006140ff8251614056565b80915050919050565b600082821b905092915050565b6000614120826140d8565b8261412a846140e3565b9050614135816140f3565b92506020821015614175576141707fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83602003600802614108565b831692505b5050919050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b60006141d8602983613597565b91506141e38261417c565b604082019050919050565b60006020820190508181036000830152614207816141cb565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614248826132a2565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361427a5761427961420e565b5b600182019050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b6000600883026142da7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82614108565b6142e48683614108565b95508019841693508086168417925050509392505050565b6000819050919050565b600061432161431c614317846132a2565b6142fc565b6132a2565b9050919050565b6000819050919050565b61433b83614306565b61434f61434782614328565b8484546142aa565b825550505050565b600090565b614364614357565b61436f818484614332565b505050565b5b818110156143935761438860008261435c565b600181019050614375565b5050565b601f8211156143d8576143a981614285565b6143b28461429a565b810160208510156143c1578190505b6143d56143cd8561429a565b830182614374565b50505b505050565b600082821c905092915050565b60006143fb600019846008026143dd565b1980831691505092915050565b600061441483836143ea565b9150826002028217905092915050565b61442d8261358c565b67ffffffffffffffff81111561444657614445613418565b5b6144508254613fe9565b61445b828285614397565b600060209050601f83116001811461448e576000841561447c578287015190505b6144868582614408565b8655506144ee565b601f19841661449c86614285565b60005b828110156144c45784890151825560018201915060208501945060208101905061449f565b868310156144e157848901516144dd601f8916826143ea565b8355505b6001600288020188555050505b505050505050565b7f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60008201527f6572206f7220617070726f766564000000000000000000000000000000000000602082015250565b6000614552602e83613597565b915061455d826144f6565b604082019050919050565b6000602082019050818103600083015261458181614545565b9050919050565b7f546f6b656e20646f6573206e6f742065786973742e0000000000000000000000600082015250565b60006145be601583613597565b91506145c982614588565b602082019050919050565b600060208201905081810360008301526145ed816145b1565b9050919050565b7f4d696e74696e672077696e646f772068617320657870697265642e0000000000600082015250565b600061462a601b83613597565b9150614635826145f4565b602082019050919050565b600060208201905081810360008301526146598161461d565b9050919050565b7f57616c6c657420616c726561647920686f6c647320746f6b656e2e0000000000600082015250565b6000614696601b83613597565b91506146a182614660565b602082019050919050565b600060208201905081810360008301526146c581614689565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614728602683613597565b9150614733826146cc565b604082019050919050565b600060208201905081810360008301526147578161471b565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614794602083613597565b915061479f8261475e565b602082019050919050565b600060208201905081810360008301526147c381614787565b9050919050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000614826602183613597565b9150614831826147ca565b604082019050919050565b6000602082019050818103600083015261485581614819565b9050919050565b6000614867826132a2565b9150614872836132a2565b925082820190508082111561488a5761488961420e565b5b92915050565b60006040820190506148a56000830185613318565b6148b26020830184613318565b9392505050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b6000614915602883613597565b9150614920826148b9565b604082019050919050565b6000602082019050818103600083015261494481614908565b9050919050565b600060408201905081810360008301526149658185613b41565b905081810360208301526149798184613b41565b90509392505050565b7f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006149de602383613597565b91506149e982614982565b604082019050919050565b60006020820190508181036000830152614a0d816149d1565b9050919050565b7f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b6000614a70602483613597565b9150614a7b82614a14565b604082019050919050565b60006020820190508181036000830152614a9f81614a63565b9050919050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b6000614b02602983613597565b9150614b0d82614aa6565b604082019050919050565b60006020820190508181036000830152614b3181614af5565b9050919050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614b94602583613597565b9150614b9f82614b38565b604082019050919050565b60006020820190508181036000830152614bc381614b87565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b6000614c26602a83613597565b9150614c3182614bca565b604082019050919050565b60006020820190508181036000830152614c5581614c19565b9050919050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b6000614c92601483613597565b9150614c9d82614c5c565b602082019050919050565b60006020820190508181036000830152614cc181614c85565b9050919050565b7f546f6b656e732063616e206f6e6c79206265207472616e73666572726564207760008201527f6974682074686520617070726f76616c206f662074686520636f6e747261637460208201527f206f776e65722e00000000000000000000000000000000000000000000000000604082015250565b6000614d4a604783613597565b9150614d5582614cc8565b606082019050919050565b60006020820190508181036000830152614d7981614d3d565b9050919050565b7f57616c6c6574206f776e6572206861736e277420656e61626c6520746f6b656e60008201527f7320746f206265207472616e736665727265642e000000000000000000000000602082015250565b6000614ddc603483613597565b9150614de782614d80565b604082019050919050565b60006020820190508181036000830152614e0b81614dcf565b9050919050565b600082825260208201905092915050565b6000614e2e826140d8565b614e388185614e12565b9350614e488185602086016135a8565b614e5181613407565b840191505092915050565b600060a082019050614e716000830188613c79565b614e7e6020830187613c79565b614e8b6040830186613318565b614e986060830185613318565b8181036080830152614eaa8184614e23565b90509695505050505050565b600081519050614ec58161336e565b92915050565b600060208284031215614ee157614ee061323a565b5b6000614eef84828501614eb6565b91505092915050565b60008160e01c9050919050565b600060033d1115614f245760046000803e614f21600051614ef8565b90505b90565b600060443d10614fb457614f39613230565b60043d036004823e80513d602482011167ffffffffffffffff82111715614f61575050614fb4565b808201805167ffffffffffffffff811115614f7f5750505050614fb4565b80602083010160043d038501811115614f9c575050505050614fb4565b614fab82602001850186613447565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e2d4552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b6000615013603483613597565b915061501e82614fb7565b604082019050919050565b6000602082019050818103600083015261504281615006565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b60006150a5602883613597565b91506150b082615049565b604082019050919050565b600060208201905081810360008301526150d481615098565b9050919050565b600060a0820190506150f06000830188613c79565b6150fd6020830187613c79565b818103604083015261510f8186613b41565b905081810360608301526151238185613b41565b905081810360808301526151378184614e23565b90509695505050505050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b6000615179601083613597565b915061518482615143565b602082019050919050565b600060208201905081810360008301526151a88161516c565b9050919050565b7f455243313135353a206275726e20616d6f756e74206578636565647320746f7460008201527f616c537570706c79000000000000000000000000000000000000000000000000602082015250565b600061520b602883613597565b9150615216826151af565b604082019050919050565b6000602082019050818103600083015261523a816151fe565b905091905056fea2646970667358221220899e8411d7e27a7e3f45fc87f4faff882da02ae20a0d68f892eea993e5c904b064736f6c63430008130033