6080604052601e600a556014600b556000600c60006101000a81548160ff0219169083151502179055506002600d556002600e556000600f5560006010556000601260006101000a81548160ff021916908315150217905550604051806020016040528060008152506013908162000078919062000b80565b506040518060800160405280604c815260200162004a3b604c913960149081620000a3919062000b80565b50348015620000b157600080fd5b50733cc6cdda760b79bafa08df41ecfa224f810dceb660016040518060400160405280600681526020017f6e65776e657700000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f4e45570000000000000000000000000000000000000000000000000000000000815250816002908162000146919062000b80565b50806003908162000158919062000b80565b5062000169620003bd60201b60201c565b600081905550505060006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b1115620003665780156200022c576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff16637d3e3dbe30846040518363ffffffff1660e01b8152600401620001f292919062000cac565b600060405180830381600087803b1580156200020d57600080fd5b505af115801562000222573d6000803e3d6000fd5b5050505062000365565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614620002e6576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663a0af290330846040518363ffffffff1660e01b8152600401620002ac92919062000cac565b600060405180830381600087803b158015620002c757600080fd5b505af1158015620002dc573d6000803e3d6000fd5b5050505062000364565b6daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff16634420e486306040518263ffffffff1660e01b81526004016200032f919062000cd9565b600060405180830381600087803b1580156200034a57600080fd5b505af11580156200035f573d6000803e3d6000fd5b505050505b5b5b5050620003886200037c620003c260201b60201c565b620003ca60201b60201c565b6001600981905550620003b773e6b81a75965e471f07b78d7601a0cd6af30a6c74600a6200049060201b60201c565b62000e89565b600090565b600033905090565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620004b2828260405180602001604052806000815250620004b660201b60201c565b5050565b6000805490506000620004cf856200077d60201b60201c565b0362000507576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000830362000542576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6200055760008583866200078760201b60201c565b600160406001901b178302600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555060e1620005c4600185146200078d60201b60201c565b901b60a042901b620005dc866200077d60201b60201c565b1717600460008381526020019081526020016000208190555060008190506000848201905060008673ffffffffffffffffffffffffffffffffffffffff163b14620006ed575b818673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46200069960008784806001019550876200079760201b60201c565b620006d0576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80821062000622578260005414620006e757600080fd5b62000759565b5b818060010192508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4808210620006ee575b816000819055505050620007776000858386620008f860201b60201c565b50505050565b6000819050919050565b50505050565b6000819050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02620007c5620008fe60201b60201c565b8786866040518563ffffffff1660e01b8152600401620007e9949392919062000da1565b6020604051808303816000875af19250505080156200082857506040513d601f19601f8201168201806040525081019062000825919062000e57565b60015b620008a5573d80600081146200085b576040519150601f19603f3d011682016040523d82523d6000602084013e62000860565b606091505b5060008151036200089d576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b50505050565b600033905090565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200098857607f821691505b6020821081036200099e576200099d62000940565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000a087fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620009c9565b62000a148683620009c9565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000a6162000a5b62000a558462000a2c565b62000a36565b62000a2c565b9050919050565b6000819050919050565b62000a7d8362000a40565b62000a9562000a8c8262000a68565b848454620009d6565b825550505050565b600090565b62000aac62000a9d565b62000ab981848462000a72565b505050565b5b8181101562000ae15762000ad560008262000aa2565b60018101905062000abf565b5050565b601f82111562000b305762000afa81620009a4565b62000b0584620009b9565b8101602085101562000b15578190505b62000b2d62000b2485620009b9565b83018262000abe565b50505b505050565b600082821c905092915050565b600062000b556000198460080262000b35565b1980831691505092915050565b600062000b70838362000b42565b9150826002028217905092915050565b62000b8b8262000906565b67ffffffffffffffff81111562000ba75762000ba662000911565b5b62000bb382546200096f565b62000bc082828562000ae5565b600060209050601f83116001811462000bf8576000841562000be3578287015190505b62000bef858262000b62565b86555062000c5f565b601f19841662000c0886620009a4565b60005b8281101562000c325784890151825560018201915060208501945060208101905062000c0b565b8683101562000c52578489015162000c4e601f89168262000b42565b8355505b6001600288020188555050505b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000c948262000c67565b9050919050565b62000ca68162000c87565b82525050565b600060408201905062000cc3600083018562000c9b565b62000cd2602083018462000c9b565b9392505050565b600060208201905062000cf0600083018462000c9b565b92915050565b62000d018162000a2c565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b8381101562000d4357808201518184015260208101905062000d26565b60008484015250505050565b6000601f19601f8301169050919050565b600062000d6d8262000d07565b62000d79818562000d12565b935062000d8b81856020860162000d23565b62000d968162000d4f565b840191505092915050565b600060808201905062000db8600083018762000c9b565b62000dc7602083018662000c9b565b62000dd6604083018562000cf6565b818103606083015262000dea818462000d60565b905095945050505050565b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b62000e318162000dfa565b811462000e3d57600080fd5b50565b60008151905062000e518162000e26565b92915050565b60006020828403121562000e705762000e6f62000df5565b5b600062000e808482850162000e40565b91505092915050565b613ba28062000e996000396000f3fe60806040526004361061020f5760003560e01c8063715018a611610118578063c87b56dd116100a0578063e985e9c51161006f578063e985e9c51461076c578063f103b433146107a9578063f2fde38b146107d2578063f6de0087146107fb578063fbe9ce9a146108265761020f565b8063c87b56dd146106b0578063d5388608146106ed578063dc33e68114610718578063e7517f50146107555761020f565b8063a22cb465116100e7578063a22cb465146105da578063b88d4fde14610603578063c46a920d1461062c578063c5d4834d14610669578063c84bd683146106855761020f565b8063715018a6146105445780638da5cb5b1461055b57806395d89b4114610586578063a101ff6d146105b15761020f565b80633ccfd60b1161019b57806355f804b31161016a57806355f804b31461044b57806362b33792146104745780636352211e1461049f5780636ebeac85146104dc57806370a08231146105075761020f565b80633ccfd60b146103b75780633ffb24d3146103ce578063400e6d66146103f957806342842e0e146104225761020f565b80631603b0d6116101e25780631603b0d6146102e257806318160ddd1461030d57806323b872dd1461033857806332cb6b0c146103615780633c48fb121461038c5761020f565b806301ffc9a71461021457806306fdde0314610251578063081812fc1461027c578063095ea7b3146102b9575b600080fd5b34801561022057600080fd5b5061023b600480360381019061023691906129c9565b61084f565b6040516102489190612a11565b60405180910390f35b34801561025d57600080fd5b506102666108e1565b6040516102739190612abc565b60405180910390f35b34801561028857600080fd5b506102a3600480360381019061029e9190612b14565b610973565b6040516102b09190612b82565b60405180910390f35b3480156102c557600080fd5b506102e060048036038101906102db9190612bc9565b6109ef565b005b3480156102ee57600080fd5b506102f7610af9565b6040516103049190612c18565b60405180910390f35b34801561031957600080fd5b50610322610aff565b60405161032f9190612c18565b60405180910390f35b34801561034457600080fd5b5061035f600480360381019061035a9190612c33565b610b16565b005b34801561036d57600080fd5b50610376610c66565b6040516103839190612c18565b60405180910390f35b34801561039857600080fd5b506103a1610c6c565b6040516103ae9190612c18565b60405180910390f35b3480156103c357600080fd5b506103cc610c72565b005b3480156103da57600080fd5b506103e3610e1e565b6040516103f09190612b82565b60405180910390f35b34801561040557600080fd5b50610420600480360381019061041b9190612b14565b610e36565b005b34801561042e57600080fd5b5061044960048036038101906104449190612c33565b610e48565b005b34801561045757600080fd5b50610472600480360381019061046d9190612ceb565b610f98565b005b34801561048057600080fd5b50610489610fb6565b6040516104969190612c18565b60405180910390f35b3480156104ab57600080fd5b506104c660048036038101906104c19190612b14565b610fbc565b6040516104d39190612b82565b60405180910390f35b3480156104e857600080fd5b506104f1610fce565b6040516104fe9190612a11565b60405180910390f35b34801561051357600080fd5b5061052e60048036038101906105299190612d38565b610fe1565b60405161053b9190612c18565b60405180910390f35b34801561055057600080fd5b50610559611075565b005b34801561056757600080fd5b50610570611089565b60405161057d9190612b82565b60405180910390f35b34801561059257600080fd5b5061059b6110b3565b6040516105a89190612abc565b60405180910390f35b3480156105bd57600080fd5b506105d860048036038101906105d39190612d91565b611145565b005b3480156105e657600080fd5b5061060160048036038101906105fc9190612df1565b61117e565b005b34801561060f57600080fd5b5061062a60048036038101906106259190612f61565b611288565b005b34801561063857600080fd5b50610653600480360381019061064e9190612d38565b6113db565b6040516106609190612c18565b60405180910390f35b610683600480360381019061067e9190612b14565b6113f3565b005b34801561069157600080fd5b5061069a61176e565b6040516106a79190612c18565b60405180910390f35b3480156106bc57600080fd5b506106d760048036038101906106d29190612b14565b611774565b6040516106e49190612abc565b60405180910390f35b3480156106f957600080fd5b506107026117e6565b60405161070f9190612a11565b60405180910390f35b34801561072457600080fd5b5061073f600480360381019061073a9190612d38565b6117f9565b60405161074c9190612c18565b60405180910390f35b34801561076157600080fd5b5061076a61180b565b005b34801561077857600080fd5b50610793600480360381019061078e9190612fe4565b61183f565b6040516107a09190612a11565b60405180910390f35b3480156107b557600080fd5b506107d060048036038101906107cb9190612b14565b6118d3565b005b3480156107de57600080fd5b506107f960048036038101906107f49190612d38565b6118e5565b005b34801561080757600080fd5b50610810611968565b60405161081d9190612c18565b60405180910390f35b34801561083257600080fd5b5061084d60048036038101906108489190612b14565b61196e565b005b60006301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108aa57506380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806108da5750635b5e139f60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b6060600280546108f090613053565b80601f016020809104026020016040519081016040528092919081815260200182805461091c90613053565b80156109695780601f1061093e57610100808354040283529160200191610969565b820191906000526020600020905b81548152906001019060200180831161094c57829003601f168201915b5050505050905090565b600061097e82611980565b6109b4576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b8160006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b1115610aea576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430836040518363ffffffff1660e01b8152600401610a67929190613084565b602060405180830381865afa158015610a84573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aa891906130c2565b610ae957806040517fede71dcc000000000000000000000000000000000000000000000000000000008152600401610ae09190612b82565b60405180910390fd5b5b610af483836119df565b505050565b600d5481565b6000610b09611b85565b6001546000540303905090565b8260006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b1115610c54573373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610b8857610b83848484611b8a565b610c60565b6daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430336040518363ffffffff1660e01b8152600401610bd1929190613084565b602060405180830381865afa158015610bee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c1291906130c2565b610c5357336040517fede71dcc000000000000000000000000000000000000000000000000000000008152600401610c4a9190612b82565b60405180910390fd5b5b610c5f848484611b8a565b5b50505050565b600a5481565b600b5481565b610c7a611b9a565b600061271061025847610c8d919061311e565b610c97919061318f565b9050600073c9b5553910ba47719e0202ff9f617b8be06b3a0973ffffffffffffffffffffffffffffffffffffffff1682604051610cd3906131f1565b60006040518083038185875af1925050503d8060008114610d10576040519150601f19603f3d011682016040523d82523d6000602084013e610d15565b606091505b5050905080610d59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5090613252565b60405180910390fd5b600073e6b81a75965e471f07b78d7601a0cd6af30a6c7473ffffffffffffffffffffffffffffffffffffffff1647604051610d93906131f1565b60006040518083038185875af1925050503d8060008114610dd0576040519150601f19603f3d011682016040523d82523d6000602084013e610dd5565b606091505b5050905080610e19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1090613252565b60405180910390fd5b505050565b73c9b5553910ba47719e0202ff9f617b8be06b3a0981565b610e3e611b9a565b80600f8190555050565b8260006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b1115610f86573373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610eba57610eb5848484611c18565b610f92565b6daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430336040518363ffffffff1660e01b8152600401610f03929190613084565b602060405180830381865afa158015610f20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f4491906130c2565b610f8557336040517fede71dcc000000000000000000000000000000000000000000000000000000008152600401610f7c9190612b82565b60405180910390fd5b5b610f91848484611c18565b5b50505050565b610fa0611b9a565b818160139182610fb1929190613429565b505050565b600e5481565b6000610fc782611c38565b9050919050565b601260009054906101000a900460ff1681565b600080610fed83611d04565b03611024576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054169050919050565b61107d611b9a565b6110876000611d0e565b565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600380546110c290613053565b80601f01602080910402602001604051908101604052809291908181526020018280546110ee90613053565b801561113b5780601f106111105761010080835404028352916020019161113b565b820191906000526020600020905b81548152906001019060200180831161111e57829003601f168201915b5050505050905090565b61114d611b9a565b82601260006101000a81548160ff021916908315150217905550818160139182611178929190613429565b50505050565b8160006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b1115611279576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430836040518363ffffffff1660e01b81526004016111f6929190613084565b602060405180830381865afa158015611213573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061123791906130c2565b61127857806040517fede71dcc00000000000000000000000000000000000000000000000000000000815260040161126f9190612b82565b60405180910390fd5b5b6112838383611dd4565b505050565b8360006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b11156113c7573373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036112fb576112f685858585611f4b565b6113d4565b6daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430336040518363ffffffff1660e01b8152600401611344929190613084565b602060405180830381865afa158015611361573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061138591906130c2565b6113c657336040517fede71dcc0000000000000000000000000000000000000000000000000000000081526004016113bd9190612b82565b60405180910390fd5b5b6113d385858585611f4b565b5b5050505050565b60116020528060005260406000206000915090505481565b42601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410611474576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146b90613545565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16146114e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d9906135b1565b60405180910390fd5b600c60009054906101000a900460ff16611531576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115289061361d565b60405180910390fd5b600a5461153c610aff565b82611547919061363d565b1115611588576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157f906136bd565b60405180910390fd5b600b5460105482611599919061363d565b11156115da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d1906136bd565b60405180910390fd5b600e5481601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611628919061363d565b1115611669576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166090613729565b60405180910390fd5b600d548111156116ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a590613795565b60405180910390fd5b42601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611741919061363d565b92505081905550806010600082825461175a919061363d565b9250508190555061176b3382611fbe565b50565b600f5481565b6060601260009054906101000a900460ff16156117bd57601361179683611fdc565b6040516020016117a7929190613874565b60405160208183030381529060405290506117e1565b60146040516020016117cf9190613898565b60405160208183030381529060405290505b919050565b600c60009054906101000a900460ff1681565b60006118048261213c565b9050919050565b611813611b9a565b600c60009054906101000a900460ff1615600c60006101000a81548160ff021916908315150217905550565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6118db611b9a565b80600a8190555050565b6118ed611b9a565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361195c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195390613921565b60405180910390fd5b61196581611d0e565b50565b60105481565b611976611b9a565b80600b8190555050565b60008161198b611b85565b1115801561199a575060005482105b80156119d8575060007c0100000000000000000000000000000000000000000000000000000000600460008581526020019081526020016000205416145b9050919050565b60006119ea82611c38565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611a51576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16611a70612193565b73ffffffffffffffffffffffffffffffffffffffff1614611ad357611a9c81611a97612193565b61183f565b611ad2576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600090565b611b9583838361219b565b505050565b611ba2612560565b73ffffffffffffffffffffffffffffffffffffffff16611bc0611089565b73ffffffffffffffffffffffffffffffffffffffff1614611c16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0d9061398d565b60405180910390fd5b565b611c3383838360405180602001604052806000815250611288565b505050565b60008082905080611c47611b85565b11611ccd57600054811015611ccc5760006004600083815260200190815260200160002054905060007c0100000000000000000000000000000000000000000000000000000000821603611cca575b60008103611cc0576004600083600190039350838152602001908152602001600020549050611c96565b8092505050611cff565b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000819050919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611ddc612193565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611e40576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060076000611e4d612193565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611efa612193565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611f3f9190612a11565b60405180910390a35050565b611f5684848461219b565b60008373ffffffffffffffffffffffffffffffffffffffff163b14611fb857611f8184848484612568565b611fb7576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b611fd88282604051806020016040528060008152506126b8565b5050565b606060008203612023576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612137565b600082905060005b6000821461205557808061203e906139ad565b915050600a8261204e919061318f565b915061202b565b60008167ffffffffffffffff81111561207157612070612e36565b5b6040519080825280601f01601f1916602001820160405280156120a35781602001600182028036833780820191505090505b5090505b60008514612130576001826120bc91906139f5565b9150600a856120cb9190613a29565b60306120d7919061363d565b60f81b8183815181106120ed576120ec613a5a565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612129919061318f565b94506120a7565b8093505050505b919050565b600067ffffffffffffffff6040600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054901c169050919050565b600033905090565b60006121a682611c38565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461220d576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006006600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008573ffffffffffffffffffffffffffffffffffffffff16612266612193565b73ffffffffffffffffffffffffffffffffffffffff16148061229557506122948661228f612193565b61183f565b5b806122d257506122a3612193565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b90508061230b576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061231686611d04565b0361234d576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61235a8686866001612947565b600061236583611d04565b146123a1576006600085815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690555b600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081546001900391905081905550600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154600101919050819055507c020000000000000000000000000000000000000000000000000000000060a042901b61246887611d04565b1717600460008681526020019081526020016000208190555060007c02000000000000000000000000000000000000000000000000000000008416036124f057600060018501905060006004600083815260200190815260200160002054036124ee5760005481146124ed578360046000838152602001908152602001600020819055505b5b505b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612558868686600161294d565b505050505050565b600033905090565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261258e612193565b8786866040518563ffffffff1660e01b81526004016125b09493929190613ade565b6020604051808303816000875af19250505080156125ec57506040513d601f19601f820116820180604052508101906125e99190613b3f565b60015b612665573d806000811461261c576040519150601f19603f3d011682016040523d82523d6000602084013e612621565b606091505b50600081510361265d576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b60008054905060006126c985611d04565b03612700576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000830361273a576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6127476000858386612947565b600160406001901b178302600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555060e16127ac60018514612953565b901b60a042901b6127bc86611d04565b1717600460008381526020019081526020016000208190555060008190506000848201905060008673ffffffffffffffffffffffffffffffffffffffff163b146128c0575b818673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46128706000878480600101955087612568565b6128a6576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8082106128015782600054146128bb57600080fd5b61292b565b5b818060010192508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48082106128c1575b816000819055505050612941600085838661294d565b50505050565b50505050565b50505050565b6000819050919050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6129a681612971565b81146129b157600080fd5b50565b6000813590506129c38161299d565b92915050565b6000602082840312156129df576129de612967565b5b60006129ed848285016129b4565b91505092915050565b60008115159050919050565b612a0b816129f6565b82525050565b6000602082019050612a266000830184612a02565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612a66578082015181840152602081019050612a4b565b60008484015250505050565b6000601f19601f8301169050919050565b6000612a8e82612a2c565b612a988185612a37565b9350612aa8818560208601612a48565b612ab181612a72565b840191505092915050565b60006020820190508181036000830152612ad68184612a83565b905092915050565b6000819050919050565b612af181612ade565b8114612afc57600080fd5b50565b600081359050612b0e81612ae8565b92915050565b600060208284031215612b2a57612b29612967565b5b6000612b3884828501612aff565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612b6c82612b41565b9050919050565b612b7c81612b61565b82525050565b6000602082019050612b976000830184612b73565b92915050565b612ba681612b61565b8114612bb157600080fd5b50565b600081359050612bc381612b9d565b92915050565b60008060408385031215612be057612bdf612967565b5b6000612bee85828601612bb4565b9250506020612bff85828601612aff565b9150509250929050565b612c1281612ade565b82525050565b6000602082019050612c2d6000830184612c09565b92915050565b600080600060608486031215612c4c57612c4b612967565b5b6000612c5a86828701612bb4565b9350506020612c6b86828701612bb4565b9250506040612c7c86828701612aff565b9150509250925092565b600080fd5b600080fd5b600080fd5b60008083601f840112612cab57612caa612c86565b5b8235905067ffffffffffffffff811115612cc857612cc7612c8b565b5b602083019150836001820283011115612ce457612ce3612c90565b5b9250929050565b60008060208385031215612d0257612d01612967565b5b600083013567ffffffffffffffff811115612d2057612d1f61296c565b5b612d2c85828601612c95565b92509250509250929050565b600060208284031215612d4e57612d4d612967565b5b6000612d5c84828501612bb4565b91505092915050565b612d6e816129f6565b8114612d7957600080fd5b50565b600081359050612d8b81612d65565b92915050565b600080600060408486031215612daa57612da9612967565b5b6000612db886828701612d7c565b935050602084013567ffffffffffffffff811115612dd957612dd861296c565b5b612de586828701612c95565b92509250509250925092565b60008060408385031215612e0857612e07612967565b5b6000612e1685828601612bb4565b9250506020612e2785828601612d7c565b9150509250929050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612e6e82612a72565b810181811067ffffffffffffffff82111715612e8d57612e8c612e36565b5b80604052505050565b6000612ea061295d565b9050612eac8282612e65565b919050565b600067ffffffffffffffff821115612ecc57612ecb612e36565b5b612ed582612a72565b9050602081019050919050565b82818337600083830152505050565b6000612f04612eff84612eb1565b612e96565b905082815260208101848484011115612f2057612f1f612e31565b5b612f2b848285612ee2565b509392505050565b600082601f830112612f4857612f47612c86565b5b8135612f58848260208601612ef1565b91505092915050565b60008060008060808587031215612f7b57612f7a612967565b5b6000612f8987828801612bb4565b9450506020612f9a87828801612bb4565b9350506040612fab87828801612aff565b925050606085013567ffffffffffffffff811115612fcc57612fcb61296c565b5b612fd887828801612f33565b91505092959194509250565b60008060408385031215612ffb57612ffa612967565b5b600061300985828601612bb4565b925050602061301a85828601612bb4565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061306b57607f821691505b60208210810361307e5761307d613024565b5b50919050565b60006040820190506130996000830185612b73565b6130a66020830184612b73565b9392505050565b6000815190506130bc81612d65565b92915050565b6000602082840312156130d8576130d7612967565b5b60006130e6848285016130ad565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061312982612ade565b915061313483612ade565b925082820261314281612ade565b91508282048414831517613159576131586130ef565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061319a82612ade565b91506131a583612ade565b9250826131b5576131b4613160565b5b828204905092915050565b600081905092915050565b50565b60006131db6000836131c0565b91506131e6826131cb565b600082019050919050565b60006131fc826131ce565b9150819050919050565b7f5472616e73666572204661696c65642100000000000000000000000000000000600082015250565b600061323c601083612a37565b915061324782613206565b602082019050919050565b6000602082019050818103600083015261326b8161322f565b9050919050565b600082905092915050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026132df7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826132a2565b6132e986836132a2565b95508019841693508086168417925050509392505050565b6000819050919050565b600061332661332161331c84612ade565b613301565b612ade565b9050919050565b6000819050919050565b6133408361330b565b61335461334c8261332d565b8484546132af565b825550505050565b600090565b61336961335c565b613374818484613337565b505050565b5b818110156133985761338d600082613361565b60018101905061337a565b5050565b601f8211156133dd576133ae8161327d565b6133b784613292565b810160208510156133c6578190505b6133da6133d285613292565b830182613379565b50505b505050565b600082821c905092915050565b6000613400600019846008026133e2565b1980831691505092915050565b600061341983836133ef565b9150826002028217905092915050565b6134338383613272565b67ffffffffffffffff81111561344c5761344b612e36565b5b6134568254613053565b61346182828561339c565b6000601f831160018114613490576000841561347e578287013590505b613488858261340d565b8655506134f0565b601f19841661349e8661327d565b60005b828110156134c6578489013582556001820191506020850194506020810190506134a1565b868310156134e357848901356134df601f8916826133ef565b8355505b6001600288020188555050505b50505050505050565b7f43414e4e4f545f4d494e545f4f4e5f5448455f53414d455f424c4f434b000000600082015250565b600061352f601d83612a37565b915061353a826134f9565b602082019050919050565b6000602082019050818103600083015261355e81613522565b9050919050565b7f434f4e5452414354535f4e4f545f414c4c4f5745445f544f5f4d494e54000000600082015250565b600061359b601d83612a37565b91506135a682613565565b602082019050919050565b600060208201905081810360008301526135ca8161358e565b9050919050565b7f4e45575f4d494e545f49535f4e4f545f5945545f414354495645000000000000600082015250565b6000613607601a83612a37565b9150613612826135d1565b602082019050919050565b60006020820190508181036000830152613636816135fa565b9050919050565b600061364882612ade565b915061365383612ade565b925082820190508082111561366b5761366a6130ef565b5b92915050565b7f4e4f545f454e4f5547485f535550504c59000000000000000000000000000000600082015250565b60006136a7601183612a37565b91506136b282613671565b602082019050919050565b600060208201905081810360008301526136d68161369a565b9050919050565b7f4558434545445f5f4d494e545f4c494d49540000000000000000000000000000600082015250565b6000613713601283612a37565b915061371e826136dd565b602082019050919050565b6000602082019050818103600083015261374281613706565b9050919050565b7f4558434545445f4d494e545f4c494d4954000000000000000000000000000000600082015250565b600061377f601183612a37565b915061378a82613749565b602082019050919050565b600060208201905081810360008301526137ae81613772565b9050919050565b600081905092915050565b600081546137cd81613053565b6137d781866137b5565b945060018216600081146137f257600181146138075761383a565b60ff198316865281151582028601935061383a565b6138108561327d565b60005b8381101561383257815481890152600182019150602081019050613813565b838801955050505b50505092915050565b600061384e82612a2c565b61385881856137b5565b9350613868818560208601612a48565b80840191505092915050565b600061388082856137c0565b915061388c8284613843565b91508190509392505050565b60006138a482846137c0565b915081905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061390b602683612a37565b9150613916826138af565b604082019050919050565b6000602082019050818103600083015261393a816138fe565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613977602083612a37565b915061398282613941565b602082019050919050565b600060208201905081810360008301526139a68161396a565b9050919050565b60006139b882612ade565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036139ea576139e96130ef565b5b600182019050919050565b6000613a0082612ade565b9150613a0b83612ade565b9250828203905081811115613a2357613a226130ef565b5b92915050565b6000613a3482612ade565b9150613a3f83612ade565b925082613a4f57613a4e613160565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000613ab082613a89565b613aba8185613a94565b9350613aca818560208601612a48565b613ad381612a72565b840191505092915050565b6000608082019050613af36000830187612b73565b613b006020830186612b73565b613b0d6040830185612c09565b8181036060830152613b1f8184613aa5565b905095945050505050565b600081519050613b398161299d565b92915050565b600060208284031215613b5557613b54612967565b5b6000613b6384828501613b2a565b9150509291505056fea26469706673582212205d70b3fde300e1151318a7480395fd99bc9bbaa86ef0037920cd3b3e9e91d1a464736f6c6343000811003368747470733a2f2f697066732e7733626d696e742e78797a2f697066732f516d5244644a50553152507459554c703934625a366a536d735a4e436e775151537a5770697576505a7771547547